我对密码学和与之相关的知识很陌生。我一直在学习提供这些功能的PRNG和CPP库,发现现代CPP中有std::random_device
和std::mt19937_64
。但是,它们之间有什么区别?我们应该在何时/何处使用它们(在什么情况下)?
我对密码学和与之相关的知识很陌生。我一直在学习提供这些功能的PRNG和CPP库,发现现代CPP中有std::random_device
和std::mt19937_64
。但是,它们之间有什么区别?我们应该在何时/何处使用它们(在什么情况下)?
std::random_device
是一个产生非确定性随机数的均匀分布整数随机数生成器。它可以与分布一起使用来生成随机数,但是许多实现的std::random_device
在熵池耗尽后性能急剧下降,因此建议仅使用它来为伪随机数生成器(例如std::mt19937_64
)提供种子。它们“不那么随机”,但不像前者那样退化,所以通常会按照以下方式链接使用:
std::random_device rd;
std::mt19937_64 eng(rd());
std::uniform_int_distribution<int> uniform_dist(1, 6)
std::cout << uniform_dist(eng);