生成伪随机缓冲区C ++

时间:2012-12-04 20:36:48

标签: c++ random buffer

  

可能重复:
  Random long long generator C++
  Random long long using boost

我有一个8字节长的缓冲区,我需要填充伪随机字节,我怎么能用C ++来做,也许可以提升。

谢谢!

3 个答案:

答案 0 :(得分: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;
}

我没有对此进行编译测试,但从阅读中我得到的参考应该是正确的。

答案 1 :(得分: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个,并将它们填入缓冲区。多田。

如果你需要这个随机缓冲区用于加密目的,你应该使用这些技术。

答案 2 :(得分:0)

for(int i = 0; i < 8; i++)
    buffer[i] = rand();