PHP5 effecient哈希生成与碰撞的最小(无)机会(PHP5 effecient hash

2019-10-28 11:21发布

密码学是不是我的事,所以希望有一些受过良好教育的人在这里比我。

我想在内存缓存中存储用户数据,我想生成一个唯一的用户数据。 我最初的想法是利用用户的用户名,或其他描述性较差的资料片,作为某种散列的基础。

我的标准是,生成过程会

  • 快速
  • 产生相同的值给出在不同的服务器/环境/ PHP的版本相同的输入
  • 和几乎没有任何机会的冲突(因为这将是灾难性的)给予了大量的投入。

我不知道我平时的武器,SHA1 / 2,是否适合这个标准,所以我点头哈腰地在这些问题的更好的诗句。 有备无患。

Answer 1:

如果您的用户名是唯一的,那么为什么你不使用它们直接而不是试图产生某种散列?

  • 他们已经保证是唯一的。
  • 它们可以原样使用。 无需额外的处理。
  • 他们会(大概平均)比相应的SHA1哈希较小。


Answer 2:

SHA2(甚至SHA1 / MD5)倒是 - 如果有会是改造(甚至意外)冲突的任何机会,我们就不会使用它。 但请注意,用户可能希望改变他们的数据,如邮政编码,甚至名字(结婚/离婚......)。

因此,唯一的用户手柄或自动生成的唯一数字ID通常是优选的。



Answer 3:

似乎没有要什么毛病SHA1你想要的东西。 如果碰撞是一个问题,根据维基SHA2一直没有任何冲突呢。

您的问题将被散列一个用户名或东西,因为这将被复制而引起的冲突。 你应该使用整个用户的行或散列类似的东西。

也更大/更复杂的哈希的时间越长,一般。



文章来源: PHP5 effecient hash generation with minimal(no) chance of collision