-4

重複の可能性:
Random long long generator C++
Random long long using boost

私は 8 バイトの長さのバッファを持っています。疑似ランダム バイトを埋める必要があります。C++ を使用してそれを行うにはどうすればよいでしょうか。

ありがとう!

4

3 に答える 3

1

これを試して:

#include <iostream>
#include <boost/random/random_device.hpp>
#include <boost/cstdint.hpp>

int main (int argc, char* argv[])
{
    boost::uint32_t buffer[2]; // 8 bytes

    boost::random::random_device rng;
    // generate wants 32-bit integers to fill which is why
    // we use boost::uint32_t here instead of char buffer[8] for example.
    rng.generate(buffer, buffer + 2);

    for (int i = 0; i < 2; ++i)
      std::cout << (int) buffer[i] << std::endl;

    return 0;
}

私はこれをコンパイルテストしていませんが、私が収集したリファレンスを読んで、それは正しいはずです。

于 2012-12-04T21:14:56.347 に答える
0
for(int i = 0; i < 8; i++)
    buffer[i] = rand();
于 2012-12-04T21:16:15.063 に答える
0

ブーストについては、http://www.boost.org/doc/libs/1_52_0/doc/html/boost_random.html (偶然にも、「ブースト ランダム」を検索したときの最初の Google 結果) をチェックしてください。

C++11 を使用してコンパイルできる場合は、std::random_device が機能するかどうかを確認できます。詳細については、 http://www.cplusplus.com/reference/random/random_device/をご覧ください。

どちらも機能せず、疑似乱数バイトだけが必要で、特定のセキュリティ要件がないことが確実な場合: 実行しているマシンから静的ではない情報を取得します (たとえば、現在の時刻、プロセスID と単調増加カウンター) は、それらすべてを文字列に詰め込み (結果として "1354654195-4710-1" のようなものを取得します)、文字列の内容を MD5 (または SHA-1) します。16 (または 20) バイトが返されます。それらの 8 つを選択し、バッファに詰め込みます。多田。

暗号化の目的でこのランダム バッファが必要な場合は、これらの手法を使用しないでください。

于 2012-12-04T20:56:33.693 に答える