【发布时间】:2018-07-09 02:54:33
【问题描述】:
我有一个应用程序,它使用哈希算法(当前为 MD5)在数据库表中生成唯一 ID。哈希是根据行的某些字段计算的,但不会检查该计算,因为稍后更改这些字段时,该行的 ID 不会更改。
现在我想更改代码以添加一些新功能,同时为 ID 生成一个纯随机数可以大大简化我的工作(要说明为什么我之前生成该 ID 要容易得多,这是一个很长的故事我能够获取哈希算法的所有必要字段的内容)
我知道通常编程语言自己的随机生成器会生成伪随机数,但我使用的是 Python 的 random.SystemRandom(),它使用了操作系统的密码学级别的“真”随机生成器,所以我认为应该是一样的与使用哈希算法生成 ID 的碰撞概率。
我的理解正确吗?如果不是,为什么?
【问题讨论】:
-
您的项目需要随机性还是唯一性?
-
@Klaus D.,不,随机性不是我的项目的要求。我只需要唯一性。并且没有全局序列生成器,所以我必须使用哈希算法或随机数。当前的实现使用了根据某些字段的内容计算的 MD5 哈希算法,但我想将其更改为简单地使用随机数,因为在我的新实现中生成 ID 时很难获取这些字段。跨度>