2012-11-29 132 views
3

我正在将大量用户数据迁移到新系统中,而以前的开发者没有将MD5密码列转换为新密码。MySQL:将未加密的密码列转换为MD5哈希

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

+2

如果你重新开始并有选择,没有理由选择MD5。这已经很久了,并且一直被认为相对不安全。理想情况下,您可以使用PBKDF或至少一个含盐散列,但如果您打算使用散列散列,那么至少应使用SHA-2散列族(如SHA-256)。 PHP和MySQL都支持它们,它们比MD5更安全。 –

+0

@JeremyBanks所以建议“不要使用MD5”(这很好),但是*推荐*为“使用SHA-x”进行密码散列?他们确实是“更强大”,但同MD5的密码哈希相同*缺陷*:它们不是为它设计的*。 (请参阅bcrypt,scrypt等,以获得久经考验的针对特定问题的解决方案。) – 2012-11-29 23:31:51

+0

另外,我觉得值得一提的是强调时尚:**没有良好的盐分,MD5(或SHA-x)密码哈希**。 – 2012-11-29 23:34:27

回答

12

MySQL已经内置MD5,只需添加一个新的列,并设置加密值有:

UPDATE users SET encrypted_password = MD5(password); 

如果您对结果满意,放弃原来的密码栏。

+0

真棒PinnyM! – dcolumbus

1

你可以做到这一切在SQL - 只使用MD5()功能: insert into my_new_table select username,MD5(password) from old_table