【问题标题】:Get different random bytes each run每次运行获取不同的随机字节
【发布时间】:2023-02-24 02:16:05
【问题描述】:

我想在 C++ 中生成一堆随机字节。为此,我使用

#include <climits>
#include <functional>
#include <random>
#include <vector>
#include <iostream>

using random_bytes_engine = std::independent_bits_engine<
    std::default_random_engine, CHAR_BIT, unsigned char>;

int main()
{
    random_bytes_engine rbe;
    std::vector<unsigned char> data(10);
    std::generate(begin(data), end(data), std::ref(rbe));

    for(int b: data) {
      std::cout << b << ", ";
    }
    std::cout << std::endl;
}
166, 240, 216, 41, 129, 199, 215, 253, 66, 76,

好的。现在,我想确保我得到不同的每次运行程序时的值,即,我想从某个地方播种 independent_bits_engine

有什么提示吗?解决方案必须是跨平台的。 (independent_bits_engine 以外的便携式解决方案也可以。)

【问题讨论】:

  • 除非这在密码学上是敏感的,否则通常使用真正的 random_device 或当前时间戳作为初始种子。
  • @MaartenBodewes 没看过。关联?

标签: c++ random random-seed


【解决方案1】:

文档中有一个示例,but it is slightly hidden as it is mentioned for the constructor,不适用于主类:

std::random_device rd;
std::independent_bits_engine<std::mt19937, /*bits*/ 3, unsigned long> e3(rd()); // seeded with rd()

其中 random_device 的实例表示系统特定的随机数生成器,如指定的 here 所示。当然,您仍然需要验证是否存在这样的随机数生成器,但我猜这与不使用系统特定功能的随机数差不多。关于的讨论安全生成的随机性可以在here 找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2011-12-06
    • 2015-11-10
    • 1970-01-01
    相关资源
    最近更新 更多