【发布时间】:2010-10-16 19:03:17
【问题描述】:
如何使用单个查询对我的用户表中的每个密码进行加密(md5()),除了一个特定的行?
【问题讨论】:
-
嗯,MD5 不是加密。这是一个哈希函数。你不能解密它。
标签: mysql encryption
如何使用单个查询对我的用户表中的每个密码进行加密(md5()),除了一个特定的行?
【问题讨论】:
标签: mysql encryption
UPDATE table SET Password = MD5(Password)
我会说,虽然 MD5 不是一个很好的加密级别,但您应该考虑一些更强大的东西,例如使用自定义盐的 ENCRYPT。阅读它here
编辑:看起来原来的问题改变了。这是要适应的更改后的查询
UPDATE table SET Password = MD5(Password) WHERE ID!=[specified index]
编辑:值得注意
【讨论】:
有比 MD5 更多的哈希函数用于在 MySQL 数据库中存储密码。
您可以在MySQL :: 11.10.2. Encryption and Compression Functions 上找到它们的列表。
UPDATE users SET password = SHA('secret_password') WHERE ....;
SELECT COUNT(*) FROM users WHERE name = 'username' && password = SHA('typed_password');
如果结果 > 0,则用户提供了正确的密码。
【讨论】:
在对密码进行哈希处理时,不要忘记对其进行加盐处理,这样相同的密码不会产生相同的哈希值:
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)
【讨论】:
关于您的编辑:您是否有标识此行的 ID 或用户名?
UPDATE mytable
SET password = MD5(password)
WHERE id <> 123
【讨论】:
为响应 OP 中的编辑而编辑。
UPDATE userTable
SET password = MD5(password)
WHERE NOT (<criteria to identify row to exclude>)
【讨论】:
我觉得还是更新了一点
SET PASSWORD FOR 'existinguser'@'localhost' = PASSWORD('newpass');
或
UPDATE user SET password = PASSWORD('newpass');
希望有帮助
【讨论】: