我需要生成 UUID 以用作不可预测/可猜测的会话 ID。
这可以使用boost 的 UUID 库轻松完成:
boost::uuids::uuid newUUID()
{
static boost::uuids::random_generator gen;
return gen();
}
返回的 UUID 可以很容易地转换为字符串。
上面的代码等价于:
boost::uuids::uuid newUUID()
{
static boost::uuids::basic_random_generator<boost::mt19937> gen;
return gen();
}
所以我们使用的是 Mersenne Twister 19937 伪随机数生成器。看起来 boost 需要认真对待它的播种任务。
但是,我想知道是否可以通过使用像boost::random_device这样的非确定性 RNG 来获得重要的安全性,以及它将如何影响 UUID 生成的速度。
boost::uuids::uuid newUUID()
{
static boost::uuids::basic_random_generator<boost::random_device> gen;
return gen();
}
感谢具有安全洞察力的人的建议。