我已经按照指示实现了我的邮件服务器 这里.

它的工作原理很好。我的好奇心围绕将用户输入数据库并进行身份验证

跑步:

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,并且完全不可支配。躲开它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top