2

私は確かにそのためにランダムジェネレータを使用することはできません。現在、unixtime()+ microtime()からCRC32ハッシュを作成しています。

time()+ microtime()をハッシュするよりも賢い方法はありますか?

結果には完全には満足していませんが、もっとランダムになると思っていましたが、MicroTime()の呼び出しを追加するまでは強いパターンが見られますが、速度が大幅に低下するため、いくつか探しています。これを行うための最適な方法。

このばかげたコードは、これまでに作成できる最高の出力を生成します。計算が必要であるか、出力にいくつかのパターンが見られました。

starthash(crc32);
    addtohash(crc32, MicroTime());
    addtohash(crc32, time(NULL)); // 64bit
    addtohash(crc32, MicroTime()/13.37f);
    addtohash(crc32, (10.0f-MicroTime())*1337.0f);
    addtohash(crc32, (11130.0f-MicroTime())/1313137.0f);
endhash(crc32);

MicroTime()は、プログラムの開始から経過したマイクロ秒を返します。addtohash()をすべての可能なタイプにオーバーロードしました。

私はむしろライブラリ以外のソリューションを採用したいと思います。おそらくとにかく10行程度のコードです。実際にはそれほど必要ないものがあるため、巨大なライブラリをインストールしたくありません。コードよりもコードに興味があります。関数呼び出しから使用するだけです。

4

2 に答える 2

3

疑わしい場合は、CryptGenRandomWindowsから、または*NIXシステムからdev/randomまたはdev/urandom*NIXシステムで読み取ることによってシードを取得してください。

これはあなたの目的にはやり過ぎかもしれませんが、パフォーマンスの問題を引き起こさない限り、時間のような低エントロピーソースをいじる意味はありません。

やり過ぎになる可能性は低いです。そして、あなたが高品質で安全なランダムデータを本当に必要としているコードを書いていて、質問でそれについて言及しなかったなら、まあ、あなたはあなたが値するものを手に入れます;-)

于 2012-05-18T14:13:03.497 に答える
0

lfsrと疑似ランダムジェネレーターを確認できます。通常、これはハードウェアソリューションですが、独自のソフトウェアlfsrを簡単に実装できます。

于 2012-05-18T14:43:04.690 に答える