MySQL:将未加密的密码列转换为MD5哈希

4

我正在将许多用户数据迁移到新系统中,之前的开发人员没有对密码列进行MD5加密。

有没有办法在password列上运行查询并将值转换为MD5?


2
如果你是从头开始选择加密算法,那么没有理由选择MD5。它已经过时并且长期以来一直被认为相对不安全。理想情况下,您应该使用PBKDF或至少使用带盐的哈希函数,但如果您要使用裸哈希,则至少应该使用SHA-2哈希族中的某个算法(例如SHA-256)。PHP和MySQL都支持它们,并且它们比MD5更安全。 - Jeremy
@JeremyBanks所以建议“不要使用MD5”(这很好),但是推荐使用SHA-x进行密码哈希吗?它们“更强大”,当然,但是与MD5相同,它们也遭受着密码哈希的相同缺陷它们并非为此而设计。(请参见bcrypt、scrypt等已经证明有效的问题特定解决方案。) - user166390
同样,我觉得值得强调的是:如果没有好的盐,MD5(或SHA-x)对于密码哈希来说是无用的。 - user166390
还有最后一点要注意:哈希不是加密。(我建议使用现有的库来处理身份验证,最好是经过充分测试且作者对此主题进行了深入研究的库,因为安全很难正确实现..) - user166390
@pst 你说得对。我当然承认PBKDF是最好的选择,而且任何类型的未加盐哈希都很容易被彩虹表攻破。但是,我认为只是建议更改哈希函数比其他任何事情更有可能被采纳。 - Jeremy
2个回答

19

MySQL内置了MD5,只需添加一个新列并将加密后的值设置在那里:

UPDATE users SET encrypted_password = MD5(password);
如果您对结果感到满意,请删除原密码列。

1

您可以在SQL中完成此操作 - 只需使用MD5()函数: insert into my_new_table select username,MD5(password) from old_table


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接