sha512-crypt mysql 和 dovecot

问题描述 投票:0回答:2

我有一个关于理解 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))),    '[email protected]'),
  ('2', '1', ENCRYPT('secondpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email protected]');

再说一次,这工作得很好,即我可以使用我的密码(并且只有我的密码)登录 dovecot。但为什么?如果我没看错的话,它会用随机盐加密密码,但不会将其保存在任何地方。因此,对相同的密码进行两次哈希处理会得到 2 个不同的哈希值(我尝试过)。所以我的问题归结为: 我可以得到 sha-512 的简要说明(我在网上找不到)以及这些线路为何有效的解释吗?

已经谢谢了

mysql sha512 dovecot sha2
2个回答
16
投票

盐作为密码的一部分保存。例如调用:

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

给予

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

这存储了所使用的算法(6 是 SHA512)和盐(“FooBarBaz”),两者均由

$
指定。

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

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

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

完全归功于hek2mgl,他在这个答案中详细介绍了密码检查。


0
投票

您可以直接使用dovecot来生成哈希。

用途:

sudo doveadm pw -s SHA512-CRYPT

这将要求您输入您尝试创建的用户的密码,并返回一个字符串,您可以将其复制并粘贴到 MYSQL 数据库中。

INSERT INTO `mailserver`.`virtual_users`
  (`id`, `domain_id`, `password` , `email`)
VALUES
  (1, 1, '{SHA512-CRYPT}$6$5kJy...', '[email protected]'),
  (...)
  ;
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.