-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

对于 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 个,然后将它们填充到缓冲区中。多田。

如果您需要将此随机缓冲区用于加密目的,则不应使用这些技术。

于 2012-12-04T20:56:33.693 回答