我有一个关于理解 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。但为什么?如果我没看错,它会使用随机盐对密码进行加密,但不会将其保存在任何地方。所以两次散列相同的密码给了我 2 个不同的散列(我试过了)。所以我的问题归结为: 我能得到 sha-512 的简要解释(我无法在网上找到它)以及这些行为何起作用的解释吗?
谢谢了
最佳答案
盐被保存为密码的一部分。例如调用:
ENCRYPT('firstpassword', CONCAT('$6$', 'FooBarBaz'))
给予
$6$FooBarBaz$.T.G.7FRJqZ6N2FF7b3BEkr5j37CWhwgvPOOoccrr0bvkBbNMmLCxzqQqKJbNhnhC.583dTBLEuZcDuQe7NEe.
这存储了使用的算法(6 是 SHA512)和盐('FooBarBaz')都由 $
定义。
编辑:要检查密码,您可以使用:
password = ENCRYPT('user_input', `password`)
ENCRYPT
将从存储的密码中获取盐,并在检查 user_input
时使用它。
他在 this answer 中详述的密码检查完全归功于 hek2mgl .
关于mysql - sha512-crypt mysql 和 dovecot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24186158/