gpt4 book ai didi

c++ - 假设 boost::uuid 不会返回重复项是否安全?

转载 作者:太空狗 更新时间:2023-10-29 23:46:31 30 4
gpt4 key购买 nike

我正在使用 boost uuid 生成 session ID。

std::string SessionGenerator::generate()
{
boost::uuids::uuid id = m_rgen();
m_ss.clear();
m_ss.str("");
m_ss << id;

return m_ss.str();
}

假设我永远不会得到重复是否安全,或者我应该对事件 session 进行检查?

谢谢

最佳答案

好吧,这取决于。

When UUIDs are generated by one of the defined mechanisms, they are either guaranteed to be unique, different from all other generated UUIDs (that is, it has never been generated before and it will never be generated again), or it is extremely likely to be unique (depending on the mechanism).

这意味着问题可能出在您使用的发电机上。他们说他们正在使用 ITU-T specification .

让我们转到文档的第 7 页。如果您使用时间并且可以假设:

  • 系统时间不会改变。
  • 用于识别机器的节点 ID 不会改变。

那么你至少可以断言:

“UUID 将不同于所有其他生成的 UUID”,因为时间流动且粒度为 100 ns。

如果您需要与其他机器共享生成的 UUID 或时间会发生变化,则可能会发生冲突(不要忘记在许多国家/地区每年有两次时间调整)。这就是为什么有一个时钟序列字段。此外,它非常小,所以在这种情况下你会断言:

“UUID 极有可能是唯一的。”

如果您使用的不是随机数生成器,那么您只能断言:

“UUID 极有可能是唯一的。” 因为随机数生成器的要求不是生成唯一的数字(但是使用好的随机数生成器,您的极有可能 极有可能)。

所以在正常条件下(例如,如果您没有将网卡从一台计算机移到另一台计算机,并且您将时间改回过去),我想您可以假设它们是唯一(使用时间)。如果您使用的是随机数生成器,您不能假设它们是唯一的,但极有可能是唯一的(关于碰撞概率......好吧......如果它发生在一个好的随机数生成器上,你应该留在下一次 meteor 雨的家)。

引用资料
http://blogs.msdn.com/b/oldnewthing/archive/2008/06/27/8659071.aspx
http://en.wikipedia.org/wiki/Birthday_attack

关于c++ - 假设 boost::uuid 不会返回重复项是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10951828/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com