MySQL ENCRYPT字段为MD5

时间:2013-07-18 20:49:04

标签: mysql encryption md5 crypt dovecot

我无法将保存在MySQL中的电子邮件用户帐户转移到其他服务器。这是详细信息:

我有一个旧的电子邮件服务器,它使用MySQL来存储用户帐户信息。密码字段使用MySQL ENCRYPT函数来保存用户密码。因此,如果我想更改用户的密码,我可以这样做:

 UPDATE  `mail`.`users` SET  `password` = ENCRYPT(  '12345' ) WHERE CONVERT(  `users`.`email` USING utf8 ) =  'g@veecall.com' LIMIT 1 ;

然后新密码“12345”以字符串“2I6JOeg.JukJ”保存在表中。

现在我使用iRedMail构建一个新服务器。当我尝试转移用户帐户时,我无法转移密码字段。因为iRadMail / dovecot使用MD5-CRAM加密密码,然后将其保存在MySQL中。所有密码字符串都以“$ 1 $”开头。

那么,有没有办法让MySQL加密密码字符串“2I6JOeg.JukJ”。转换为MD5哈希“$ 1 $ .................”?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

首先,MD5是一种散列算法,而不是加密算法。主要原因是几乎不可能从MD5生成的哈希值计算原始密码。 MD5创建一个哈希值,它基本上是一个陷阱门函数,换句话说它是一个单向函数。

如果您知道密钥,加密将允许您加密和解密。很大的区别。希望你能理解。

现在为您解决问题。

除非您在加密之前拥有原始密码,否则除了强力创建MD5等效密码之外没有合理的方法。加密密码哈希和未加密/纯文本密码哈希将是两种不同的想法。

如果您可以将当前拥有的所有密码解密为纯文本格式,则可以对纯文本值执行MD5哈希处理。如果你不能得到原始的纯文本,那么你就不走运了。