重複の可能性:
Random long long generator C++
Random long long using boost
私は 8 バイトの長さのバッファを持っています。疑似ランダム バイトを埋める必要があります。C++ を使用してそれを行うにはどうすればよいでしょうか。
ありがとう!
重複の可能性:
Random long long generator C++
Random long long using boost
私は 8 バイトの長さのバッファを持っています。疑似ランダム バイトを埋める必要があります。C++ を使用してそれを行うにはどうすればよいでしょうか。
ありがとう!
これを試して:
#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;
}
私はこれをコンパイルテストしていませんが、私が収集したリファレンスを読んで、それは正しいはずです。
for(int i = 0; i < 8; i++)
buffer[i] = rand();
ブーストについては、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 つを選択し、バッファに詰め込みます。多田。
暗号化の目的でこのランダム バッファが必要な場合は、これらの手法を使用しないでください。