mysql - sha512-crypt mysql 和 dovecot

标签 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。但为什么?如果我没看错,它会使用随机盐对密码进行加密,但不会将其保存在任何地方。所以两次散列相同的密码给了我 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/

相关文章:

php - 使用 Codeigniter 实现 SHA 512 哈希

python - 无法在 iconomi 的 python 中使用 sha512 签署消息

php - 登录表单不读取 sha512

mysql - dovecot passdb 中的密码无效 : Not a valid MD5-CRYPT or PLAIN-MD5 password

ssl - dovecot SSL 握手问题

Linux Dovecot 未使用 Imap 显示所有文件夹

表匹配的 PHP/SQL 查询(通配符)

php - 防止重复无限滚动ajax加载器

mysql - 如何获取第一个查询的 ID 并将其用于第三个查询?

mysql - 为企业创建ID