如何在MySQL中哈希密码?

san*_*anu 7 mysql encryption

除了使用单个查询的一个特定行外,我将如何使用我的用户表中的每个密码加密(md5())?

jer*_*ear 12

UPDATE table SET Password = MD5(Password)
Run Code Online (Sandbox Code Playgroud)

我会说虽然MD5不是一个非常好的加密级别,你应该考虑更强大的东西,比如使用自定义盐的ENCRYPT.在这里阅读它

编辑:看起来原始问题已更改.这是改变的查询以适应

UPDATE table SET Password = MD5(Password) WHERE ID!=[specified index]
Run Code Online (Sandbox Code Playgroud)

编辑:值得注意

MD5加密被黑了

  • “被黑”链接与密码验证完全无关。我希望人们在对实际漏洞一无所知时不要再将 MD5 称为“已损坏”。 (2认同)

gue*_*rda 6

MySQL 中的哈希函数

用于在 MySQL 数据库中存储密码的哈希函数比 MD5 多得多。
您可以在MySQL :: 11.10.2上找到它们的列表加密和压缩功能

保存密码(哈希):

UPDATE users SET password = SHA('secret_password') WHERE ....;
Run Code Online (Sandbox Code Playgroud)

检查密码:

SELECT COUNT(*) FROM users WHERE name = 'username' && password = SHA('typed_password');
Run Code Online (Sandbox Code Playgroud)

如果结果 > 0,则用户提供了正确的密码。


Qua*_*noi 5

对密码进行散列时,不要忘记给它们加盐,这样相同的密码就不会产生相同的散列:

SET @salt := CONV(FLOOR(RAND() * 0x100000000), 10, 16)

UPDATE  passwords
SET     password = CONCAT(@salt, SHA(CONCAT(@salt, @typed_password)))

SELECT  1
FROM    passwords
WHERE   SHA(CONCAT(SUBSTRING(password, 1, 8), @typed_password)) = SUBSTRING(password, 9, 40)
Run Code Online (Sandbox Code Playgroud)