PHP5高效哈希生成,具有最小(无)碰撞机会

时间:2011-02-17 11:17:01

标签: php hash memcached

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

我想在memcache中存储用户数据,我想为用户数据生成唯一的数据。 我最初的想法是使用用户的用户名或其他描述性较差的信息作为某种哈希的基础。

我的标准是生成过程

  • 在不同服务器/环境/ php版本的相同输入下生成相同的值
  • 并且在给定大量输入的情况下几乎没有碰撞的可能性(因为这将是灾难性的)。

我不确定我常用的武器sha1 / 2是否符合这个标准,所以我在这些问题上向那些更好的经文鞠躬。比抱歉更安全。

3 个答案:

答案 0 :(得分:5)

如果您的用户名是唯一的,那么为什么不直接使用它们而不是尝试生成某种哈希?

  • 他们已经保证是独一无二的。
  • 它们可以按原样使用。无需额外处理。
  • 他们(可能平均而言)小于相应的SHA1哈希值。

答案 1 :(得分:2)

SHA2(甚至是SHA1 / MD5)确实适合 - 如果有任何设计(甚至意外)碰撞的机会,我们就不会使用它。但请注意,用户可能希望更改其数据,例如邮政编码,甚至是姓名(结婚/离婚......)。

因此,通常最好使用唯一的用户句柄或自动生成的唯一数字ID。

答案 2 :(得分:1)

对于你想要的东西,sha1似乎没有任何问题。如果碰撞是一个问题,根据wiki sha2还没有任何碰撞。

您的问题将是哈希用户名或其他内容,因为它会被复制并导致冲突。你应该使用整个用户行或类似的哈希值。

一般来说,哈希越大/越复杂,花费的时间越长。

相关问题