【问题标题】:Generating pseudo-random buffer C++ [duplicate]生成伪随机缓冲区C ++ [重复]
【发布时间】:2026-01-13 00:40:01
【问题描述】:

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

我有一个 8 字节长的缓冲区,我需要用伪随机字节填充它,我如何使用 C++ 来完成它,也许还能提升。

谢谢!

【问题讨论】:

  • 您有什么问题吗?
  • 这个“问题”你要问多少次?
  • @NikBougalis,是的,但我问错了问题,我只需要一个随机的 8 个字节用于 C++,它适用于 Windows 和 Linux,boost 是可禁用的
  • 这个问题与其他问题的不同之处在于它不要求加密强度。那么你真正需要哪个?

标签: c++ random buffer


【解决方案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;
}

我没有对此进行编译测试,但从阅读我收集的参考资料来看,它应该是正确的。

【讨论】:

    【解决方案2】:

    对于提升,请查看http://www.boost.org/doc/libs/1_52_0/doc/html/boost_random.html(巧合的是,搜索“提升随机”时的第一个谷歌结果)。

    如果您可以使用 C++11 进行编译,您可以查看 std::random_device 是否可以工作。查看http://www.cplusplus.com/reference/random/random_device/了解更多详情。

    如果这些都不起作用,并且您确定只需要 伪随机字节并且没有特定的安全要求:从机器中获取一些信息您正在运行的是 not 静态的(例如,当前时间、进程 ID 和单调递增的计数器)将它们全部填充到一个字符串中(得到类似“1354654195-4710-1”的内容结果)和MD5(或SHA-1)字符串的内容。您将获得 16(或 20)个字节。选择其中的 8 个,然后将它们填充到缓冲区中。多田。

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

    【讨论】:

      【解决方案3】:
      for(int i = 0; i < 8; i++)
          buffer[i] = rand();
      

      【讨论】: