Postfix + MySQL Encrypt(),它如何用随机盐验证密码?
-
30-09-2019 - |
题
我已经按照指示实现了我的邮件服务器 这里.
它的工作原理很好。我的好奇心围绕将用户输入数据库并进行身份验证
跑步:
INSERT INTO users (email, password) VALUES ('sales@example.com', ENCRYPT('password'));
多次使用随机盐为加密密码提供不同的哈希。即,如果我输入sales@example.com三次使用相同的密码,每个哈希都不一样...
我对此的问题是,当用户通过邮件客户端登录时,Postfix Server如何实际验证密码?
每句话都没有任何问题,因为它可以正常工作,而只是为了满足我的好奇心,因此我可以完全理解幕后发生的事情以正确身份验证加密密码。
解决方案
阅读男人地下室:它在回报值的前两个字符中返回盐。
因此,盐不会丢失,您可以将加密的字符串与crypt的结果进行比较(“通行证”,$ first_two_chars_of_encrypted_value)。
其他提示
Postfix将数据库的密码与盐(来自DB的密码)进行的新加密进行比较。
加密:
update user set password = ENCRYPT('1234') where id = 1
检查密码:
SELECT u.* FROM user u where u.email ='admin@dominio.com'
and ENCRYPT('1234', u.password) = u.password
您必须使用加密(“通过”,“盐”)强制盐,否则盐将永远丢失,您无法恢复盐。没有它的功能相当毫无意义。但是,使用的功能是一个可怕的功能,因为安全性是如此之最小。使用password()或old_password()。
Encrypt()使用系统crypt(),它可能使用所有或仅使用前8个字符,必须是可打印的7位ASCII,通常使用1轮基于DES的Hash,并且完全不可支配。躲开它。
不隶属于 StackOverflow