【问题标题】:How to hash passwords in MySQL?如何在 MySQL 中对密码进行哈希处理?
【发布时间】:2010-10-16 19:03:17
【问题描述】:

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

【问题讨论】:

  • 嗯,MD5 不是加密。这是一个哈希函数。你不能解密它。

标签: mysql encryption


【解决方案1】:
UPDATE table SET Password = MD5(Password)

我会说,虽然 MD5 不是一个很好的加密级别,但您应该考虑一些更强大的东西,例如使用自定义盐的 ENCRYPT。阅读它here

编辑:看起来原来的问题改变了。这是要适应的更改后的查询

UPDATE table SET Password = MD5(Password) WHERE ID!=[specified index]

编辑:值得注意

MD5 Encryption Hacked

【讨论】:

  • 如果密码用md5()加盐加密怎么办?双重盐腌怎么样?仍然可以破解?
  • 这似乎没有回答 OP 的问题,因为它散列 每一 行,而 OP 想要散列 除一个 之外的每一行。
  • “被黑”链接与密码验证完全无关。当人们对实际漏洞一无所知时,我希望人们不要再称 MD5 为“损坏”。
  • 当然可以,您只需将盐字符串连接到密码的前/尾即可。这就是盐渍 md5 的作用。
【解决方案2】:

MySQL 中的哈希函数

有比 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,则用户提供了正确的密码。

【讨论】:

    【解决方案3】:

    在对密码进行哈希处理时,不要忘记对其进行加盐处理,这样相同的密码不会产生相同的哈希值:

    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)
    

    【讨论】:

    • 你需要用零填充你的盐:LPAD(@salt, 8, '0');
    【解决方案4】:

    关于您的编辑:您是否有标识此行的 ID 或用户名?

    UPDATE mytable
    SET password = MD5(password)
    WHERE id <> 123
    

    【讨论】:

    • 现在是 2015 年!应避免使用 MD5
    【解决方案5】:

    为响应 OP 中的编辑而编辑。

    UPDATE userTable
    SET password = MD5(password)
    WHERE NOT (<criteria to identify row to exclude>)
    

    【讨论】:

    【解决方案6】:

    我觉得还是更新了一点

    SET PASSWORD FOR 'existinguser'@'localhost' = PASSWORD('newpass');
    

    UPDATE user SET  password = PASSWORD('newpass');
    

    希望有帮助

    【讨论】:

    • 更好的是结合@Quassnoi的答案,使用每个密码存储的盐和服务器范围的胡椒。 "UPDATE user SET password = PASSWORD(CONCAT(salt, typed_pa​​ssword, pepper))"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 2020-05-23
    • 1970-01-01
    相关资源
    最近更新 更多