2

我可以使用下面的代码插入一行。

USE pmdb;
INSERT INTO md5_tbl (md5_val, username, password) VALUES(MD5('abcdef'), 'usna', MD5('Aa123456'));

当我使用用户名字段选择行时,如何解密或解码密码?

4

7 回答 7

6

首先,MD5 是一种散列算法 = 不可能解密(暴力攻击除外,但是......)

其次,不要使用 MD5 来散列密码,它根本不安全。相反,至少使用SHA 系列 + 称为“盐渍”的技术。

于 2012-06-13T08:16:50.787 回答
4

MD5不能解密,

您应该在数据库中搜索输入密码的 MD5 值进行比较。

SELECT * FROM md5_tbl WHERE password = MD5('password') AND username = 'username'
于 2012-06-13T08:16:53.027 回答
3

MD5 的想法是您不再解密它。而是加密用户提供的密码并将其与存储在表中的值进行比较。

于 2012-06-13T08:14:55.493 回答
3

哈希不能反转。它不是“加密”。我建议您在这里查看散列和加密之间区别的解释。

也就是说,我想您正在尝试在登录时检查用户的密码。使用哈希的方式是:

  1. 用户输入的哈希密码。

  2. 从数据库中检索散列密码。

  3. 比较散列(逐字节)——如果它们匹配,则密码是正确的。

于 2012-06-13T08:17:52.387 回答
2

你不能。MD5 不是加密算法,而是散列算法。

您所做的是对新输入的密码进行哈希处理,并将其与存储在数据库中的哈希值进行比较:

select *
from md5_tbl
where username = ?username and password = md5(?password)
于 2012-06-13T08:15:06.983 回答
2

彩虹桌?;-)

MD5 是一种单向散列算法。它不能被“解密”。

于 2012-06-13T08:15:17.250 回答
2
select * from md5_tbl where username = 'username' AND password = MD5('password')

不要忘记清理输入以防止 SQL 注入攻击。

如果你想反转MD5,你不能这样做。如果您想加密和解密某些东西,请查看 RSA。

于 2012-06-13T08:15:50.467 回答