首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用mysql 8 SHA2散列dovecot密码

用mysql 8 SHA2散列dovecot密码
EN

Stack Overflow用户
提问于 2018-07-19 10:53:24
回答 2查看 2.2K关注 0票数 10

以前(MySQL 5.7)我们使用这个命令将一个新的电子邮件地址添加到现有的表中:

代码语言:javascript
运行
复制
INSERT INTO `servermail`.`virtual_users`
(`id`, `domain_id`, `password` , `email`)
VALUES
('1', '1', ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'user@example.com'),

然后dovecot能够对用户进行身份验证。(更多信息关于dovecot密码方案)

现在,MySQL的最新版本已经不再推荐加密了。(链接)

我想用SHA2重写这个命令,但我没有成功。

编辑:

这可以帮助用户使用如何使用后缀、Dovecot、MySQL和SpamAssassin配置邮件服务器配置MySQL8.0版本的邮件服务器。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-09 08:20:10

最后,我将dovecote用于其用户身份验证的默认方法从SHA512-CRYPT更改为SHA512。我认为它的安全性不亚于此,但MySQL 8支持它。

之后,我使用这个命令向表中添加了一个新用户。

代码语言:javascript
运行
复制
INSERT INTO `servermail`.`virtual_users`
(`id`, `domain_id`, `password` , `email`)
VALUES
('1', '1', TO_BASE64(UNHEX(SHA2('password', 512))), 'user@example.com'); 
票数 15
EN

Stack Overflow用户

发布于 2021-09-08 14:31:50

why 512-密码似乎不可能在MySQL内实现,而且就Dovecot而言,我承认我无法理解为什么他们建议首先使用加密。按照OP的建议,使用强散列至少也同样有效,而且更安全。

由于我更喜欢带有额外盐的密码,下面是如何使用Dovecot的SSHA512,这是“存储在base64中的密码的盐渍SHA512和”:

代码语言:javascript
运行
复制
INSERT INTO `virtual_users`
(`id`, `domain_id`, `password` , `email`)
VALUES
(NULL, '1',  (SELECT REPLACE(TO_BASE64(CONCAT(UNHEX(SHA2(CONCAT('YourPasswordHere', v.salt), 512)), v.salt)), '\n', '') AS salted FROM (SELECT SHA2(RAND(), 512) AS salt) v), 'user@example.com');

或更新密码:

代码语言:javascript
运行
复制
UPDATE virtual_users
SET `password` = (
    SELECT REPLACE(TO_BASE64(CONCAT(UNHEX(SHA2(CONCAT('YourPasswordHere', v.salt), 512)), v.salt)), '\n', '') AS salted
    FROM (
        SELECT SHA2(RAND(), 512) AS salt
    ) v
)
WHERE email = 'user@example.com';

这些查询如下:

  1. 生成一个随机的(相当长的)盐
  2. 将salt附加到密码
  3. 获取#2的SHA512哈希
  4. 将散列转换为二进制
  5. 把盐附加到#4
  6. 将整个过程转换为Base64
  7. 删除MySQL的TO_BASE64()函数添加的不必要的换行符

结果是一个256字节长的字符串,因此您可能需要将您的password字段更新为VARCHAR(256)。

有许多教程建议使用doveadm手动生成加密密码,虽然这很好,但我发现它更麻烦一些。对那些有兴趣的人来说,你可以这样称呼它:

代码语言:javascript
运行
复制
doveadm pw -s SHA512-CRYPT -p "YourPasswordHere"

更有用的功能是使用相同的实用程序验证生成的密码:

代码语言:javascript
运行
复制
doveadm auth test user@example.com YourPasswordHere
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51420805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档