密码的双向处理有什么好的选择?

时间:2009-08-28 01:59:58

标签: php security

我打算使用Kohana的加密类,但是有更好更安全的双向处理方式吗?我希望我的用户能够发送他们之前密码的请求,而不是给他们重置密码。

您可以建议的任何算法或库?特别是在PHP?

4 个答案:

答案 0 :(得分:7)

我不会进行双向加密。这基本上没有加密,因为您需要访问代码中的加密密钥,以便有效地破坏您的所有密码。

您应该使用单向函数,例如SHA1MD5(SHA1更好)。当用户尝试登录时,加密他们使用的密码并将其与您存储的密码进行比较。

答案 1 :(得分:2)

双向加密不是可行的方法,因为持有服务器密钥的人基本上可以访问所有密码。这意味着如果您有一个心怀不满的员工或管理员,他们可以使用您的所有用户帐户数据。另外,您如何确保您需要的密钥?当您向用户提供密码时,如何保护站点与用户之间的通信。我的建议是不去那里。

答案 2 :(得分:0)

加密:

base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));

要解密:

rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "\0");

不过,最好是用你的密码哈希(用盐!)并给你的用户一个重置链接,这样你就可以保证自己/你最终的错误。

答案 3 :(得分:0)

我会在每个人最喜欢的开发社区网站之后建模。

但是,严肃地说,在后端托管密码以便检索并显示给最终用户会出现一些安全问题:

  • 有权访问数据库/密钥的人可以访问所有密码
  • 发送给最终用户进行显示时,可以嗅探密码

我建议使用单向哈希(google用于最佳算法 - 几年前SHA-1表现不错,但人们总是在破解加密算法方面取得进展)。您只需将哈希应用于最终用户提供的密码,并将其与您存储的哈希密码进行比较 - 如果结果字符串匹配您的身份验证成功。

如果您想使用经过验证的公钥或对称密钥算法,至少要努力不要以纯文本形式通过网络发送密码。