sha512-crypt mysql和dovecot

时间:2014-06-12 13:48:41

标签: mysql sha512 dovecot sha2

我有一个关于理解sha512-crypt哈希的问题。我发现这个tutorial用mysql设置dovecot和postfix。我按照教程(略有修改),一切正常。但有一点,我不明白:

要添加用户,我应该使用:

INSERT INTO `mailserver`.`virtual_users`
  (`id`, `domain_id`, `password` , `email`)
VALUES
  ('1', '1', ENCRYPT('firstpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))),    'email1@example.com'),
  ('2', '1', ENCRYPT('secondpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email2@example.com');

再次,这完全正常,即我可以用我的密码(只有我的密码)登录到dovecot。但为什么?如果我看对了,它会用随机盐加密密码,但它不能保存在任何地方。所以两次使用相同的密码给我两个不同的哈希值(我试过了)。所以我的问题归结为: 我能否简单解释一下sha-512(我无法在网上找到)以及解释为什么这些线路有效?

非常感谢

1 个答案:

答案 0 :(得分:13)

盐被保存为密码的一部分。例如,呼叫:

ENCRYPT('firstpassword', CONCAT('$6$', 'FooBarBaz')) 

给出

  

$ 6 $ $ FooBarBaz .T.G.7FRJqZ6N2FF7b3BEkr5j37CWhwgvPOOoccrr0bvkBbNMmLCxzqQqKJbNhnhC.583dTBLEuZcDuQe7NEe。

这将存储使用的算法(6为SHA512)和盐(' FooBarBaz')都由$删除。

编辑:要检查密码,您可以使用:

password = ENCRYPT('user_input', `password`)

ENCRYPT将从存储的密码中获取salt,并在检查user_input时使用此密码。

hek2mgl完全归功于他在this answer中详述的密码检查。