1, 2 通用模板

#include <iostream>
#include <random>
int main() {
// 第一步:初始化真随机种子(使用硬件熵源)
std::random_device rd;
// 第二步:选择高性能引擎(推荐 mt19937)
std::mt19937 gen(rd()); // 用 random_device 的输出来种子初始化引擎
// 第三步:定义分布(例如生成 [1, 100] 的均匀整数)
std::uniform_int_distribution<> dis(1, 100);
// 生成随机数
for (int i = 0; i < 5; ++i) {
std::cout << dis(gen) << " "; // 每次调用 dis(gen) 生成一个随机数
}
return 0;
}
3 示例

#include <vector>
#include <random>
std::vector<uint8_t> generate_crypto_random(size_t len) {
std::random_device rd; // 需要确认实现是否基于硬件熵源(如Linux的/dev/urandom)
std::vector<uint8_t> buffer(len);
for (auto& byte : buffer) {
byte = static_cast<uint8_t>(rd()); // 直接使用 random_device
}
return buffer;
}
4 优化 + 对比

std::random_device rd;
std::seed_seq seed_seq{rd(), rd(), rd()}; // 混合多个熵源
std::mt19937 gen(seed_seq);

5 验证方法

#include <map>
#include <iostream>
void test_distribution() {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(1, 6);
std::map<int, int> counts;
for (int i = 0; i < 10000; ++i) {
++counts[dis(gen)];
}
for (const auto& pair : counts) {
std::cout << "Value " << pair.first << ": " << pair.second << " times\n";
}
}
