-1

long long暗号強度С++でランダムを生成するソリューションは何ですか? (ブーストは許可されています)

4

2 に答える 2

6

<random>ヘッダーは、潜在的に暗号 pRNG を含む乱数機能へのポータブル アクセスを提供します。

#include <random>     // random_device, uniform_int_distribution
#include <algorithm>  // generate_n
#include <iterator>   // ostream_iterator
#include <iostream>   // cout
#include <functional> // bind, ref

int main() {
    std::random_device r;
    std::uniform_int_distribution<long long> dist;

    std::generate_n(std::ostream_iterator<long long>(std::cout, "\n"), 10,
        std::bind(dist,std::ref(r)));
}

std::random_deviceすべての実装で暗号化 pRNG ではない可能性があるため、実装のドキュメントを確認する必要があります。特に、2012 年より前の VC++ は、非決定論的な実装を提供していません。VC++ 2012 以降では、Windows 暗号化サービスを使用してこれを実装しています。

Linux や Mac OS X などの他のオペレーティング システムでの実装では、通常、「/dev/urandom」または「/dev/random」、またはファイル システムを介して公開されているその他の任意のデバイスを使用できます。たとえば、libc++ はデフォルトで "/dev/urandom" を使用しますが、これは OS X では Yarrow アルゴリズムを使用します。

ブーストを除外したことは知っていますが、boost::random_deviceそのプラットフォームの暗号化サービスを使用する Windows の実装があります。

于 2012-12-04T17:58:56.003 に答える
3

/dev/randomLinuxでは、またはから読み取ることができます/dev/urandom

どちらも暗号エントロピーを提供します。

それらの違いは次のとおりです。/dev/randomエントロピーが使い果たされた場合はブロックされるため、より遅くなる可能性がありますが/dev/urandom、「強い」です

したがって、ストリームを使用すると、次のようになります

long long n;
std::ifstream rstream ("/dev/random");
rstream >> n;
于 2012-12-04T18:00:55.243 に答える