c# - 重複しない - rngcryptoserviceprovider




ロバスト乱数生成 (4)

私は特別なハードウェアを使用しない、パフォーマンスの高い、堅牢なRNGを探しています。 それは数学的な方法(メルセンヌツイスターなど)を使用することができます、それは何でも、マシンから "エントロピーを収集する"ことができます。 Linux / etcには48個のランダムビットを生成するdrand48()あります。 私は32ビット以上の乱数を生成することができるC ++またはC#のための同様の関数/クラスを希望します。また、下位ビットは上位ビットと同じようにランダムです。

暗号で保護する必要はありませんが、C言語のrand()または.NET System.Random使用したり、それを基にしたりしてはいけません。

任意のソースコード、ソースへのリンクなどが評価されます! それに失敗したら、私はどんなタイプのRNGを探していますか?


C ++ 11はboost.randomに基づく堅牢な乱数ライブラリを採用しています。 さまざまなアルゴリズムを使用して、品質、スピード、またはサイズの要件を満たす多数の乱数エンジンにアクセスできます。 品質実装では、 std::random_device使用してプラットフォームが提供するすべての非確定的なRNGにアクセスすることさえできます。

さらに、特定のディストリビューションを作成するアダプタが数多くあり、手作業による操作(間違って行われることが多い)が不要です。

#include <random>


C ++の場合、 Boost.Randomはおそらくあなたが探しているものです。 これはMT(他の多くのアルゴリズムの中でも)をサポートしており、 nondet_randomクラスを介してエントロピーを収集することができます。 見てみな! :-)


Gnu Scientific Library (GSL)には、RNジェネレータ、テストハーネスなどのかなりのセットがあります。もしあなたがLinuxを利用しているのであれば、おそらくあなたのシステムで既に利用可能でしょう。








random