2

我正在阅读本教程,并且正在使用 ENCRYPT MySQL 函数。

http://www.pixelinx.com/2010/10/creating-a-mail-server-on-ubuntu-using-postfix-courier-ssltls-spamassassin-clamav-and-amavis/

但是现在我遇到了如何在 MySQL 或 php 中解密加密密码的问题?我想比较输入的密码是否与加密的密码相同。

我该如何比较它?MySQL 必须使用 ENCRYPT 函数加密!

我正在搜索,但我找不到任何如何解密 ENCRYPT MySQL 函数...

4

3 回答 3

15

ENCRYPT正在使用单向哈希算法,没有DECRYPT..这就是加密密码的意义:黑客应该没有选择查看明文密码。

当您需要将 db 中的密码与用户输入的密码进行比较时,请使用这样的查询(使用准备好的查询)

SELECT * FROM `user`
WHERE `name` = 'hek2mgl` 
  AND `password` = ENCRYPT('user_input', `password`)

ENCRYPT函数将输出一个以盐本身为前缀的“salted”字符串,因此将加密密码反馈给它将重新提供原始盐。

于 2013-05-10T15:42:05.573 回答
4

您无法解密密码 - 它使用单向加密进行加密。

您需要做的是加密输入的密码并将结果与​​存储的加密密码进行比较。

于 2013-05-10T15:41:54.537 回答
0

您无需解密密码。为了检查用户是否提交了正确的密码,只需重新加密用户提供的密码并检查它是否与存储在数据库中的密码匹配。

此外,一个简单的哈希函数就足够了(避免使用 MD5 并使用盐来防止字典或彩虹表攻击!)

于 2013-05-10T15:44:33.940 回答