首页 > 解决方案 > MD5/SHA-1等哈希算法能否生成比纯随机数碰撞概率更小的ID?

问题描述

我有一个应用程序,它使用哈希算法(目前是 MD5)在数据库表中生成唯一 ID。哈希是根据一行的某些字段计算的,但没有检查该计算,因为稍后更改这些字段时,该行的 ID 不会更改。

现在我想更改代码以添加一些新功能,同时为 ID 生成一个纯随机数可以大大简化我的工作(这是一个很长的故事来说明为什么在我之前生成该 ID 更容易能够获取散列算法的所有必要字段的内容)

我知道通常编程语言自己的随机生成器会生成伪随机数,但我使用的是 Python 的 random.SystemRandom(),它使用操作系统的密码学级别的“真”随机生成器,所以我认为它应该是相同的碰撞概率比较使用哈希算法生成 ID。

我的理解正确吗?如果不是,为什么?

标签: pythonrandommd5uuid

解决方案


生成 X 个字节的随机数据给出了与在某些 ID 上使用哈希函数完全相同的冲突概率......

假设...

  1. 您使用散列函数的列本身是唯一的。
  2. 你没有犯错#1

我建议使用系统的加密随机数提供程序。因为你可能犯了错误。这是一个简单的:

您的系统:连接第 1 列和第 2 列,并对结果进行哈希处理。您可以保证永远不会再对第 1 列和第 2 列的值执行此操作。绝不。

什么时候:

  1. 第 1 列 = “abc”
  2. 第 2 列 = “定义”

对比

  1. 第 1 列 = “ab”
  2. 第 2 列 = “cdef”

那些将创建相同的哈希函数。

那么你会更信任谁给你随机数据呢?你自己?还是一个操作系统开发团队,包括密码学专家和数十年的研究和经验?:)

使用系统的加密随机函数。


推荐阅读