可能重复:
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();
对于 boost,请查看http://www.boost.org/doc/libs/1_52_0/doc/html/boost_random.html(巧合的是,搜索“boost random”时的第一个 google 结果)。
如果您可以使用 C++11 进行编译,您可以查看 std::random_device 是否可以工作。查看http://www.cplusplus.com/reference/random/random_device/了解更多详情。
如果这些都不起作用,并且您确定您只想要伪随机字节并且没有特定的安全要求:从您正在运行的机器上获取一些不是静态的信息(例如当前时间,进程ID 和单调递增的计数器)将它们全部填充到一个字符串中(结果得到类似“1354654195-4710-1”的内容)和 MD5(或 SHA-1)字符串的内容。您将获得 16(或 20)个字节。选择其中的 8 个,然后将它们填充到缓冲区中。多田。
如果您需要将此随机缓冲区用于加密目的,则不应使用这些技术。