2010年2月23日火曜日

[.NET]乱数を扱う

.NET Frameworkでは乱数を発生させる仕組みとして、Randomというクラスが提供されています。
しかし、このRandomというクラスは、Donald E. Knuth の乱数ジェネレータ減算アルゴリズムに基づいています。・・・アルゴリズムの詳細はよくわかりませんが、なんでもある演算とシード値(引数)を使って擬似的な乱数を生成するようです。
擬似乱数であるため、完全ではないようで、完全な乱数?するには、.NET Frameworkでは、RNGCryptoServiceProviderというクラスが用意されています。
このクラスは、乱数ジェネレータ(Random Number Generator) の実装らしく、Randomよりは正確な乱数を生成することができるようです。で、使ってみました。コードはこんな感じ。

private void button1_Click(object sender, EventArgs e)
{
    //using System.Security.Cryptography;

    //32bitの数値用に4byteバッファを確保
    byte[] bytes = new byte[4];

    //暗号乱数ジェネレータでバイト列を生成
    RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
    rng.GetBytes(bytes);

    //byte列を数値に変換
    textBox1.Text = BitConverter.ToInt32(bytes, 0).ToString();

}

0 件のコメント :