使用PHP验证dovecot的SHA512-CRYPT哈希

时间:2018-04-17 10:36:53

标签: php

我正在为我的邮件服务器设置构建一个简单的管理界面,因此我尝试将身份验证连接到Dovecot使用的数据库中的邮件帐户。

我在Dovecot中使用SHA512-CRYPT算法并参考此博文https://mad9scientist.com/dovecot-password-creation-php/我可以从我的PHP应用程序创建密码,可以通过doveadm pw -t命令验证。

$password = "123456";
$salt = substr(sha1(rand()), 0, 16);
$hashedPassword = "{SHA512-CRYPT}" . crypt($password, "$6$$salt");
// Example: $hashedPassword: {SHA512-CRYPT}$6$0e7d3217f1df9e8d$sIrNt9Q1t/lVOy/QKfMFpp.0Qyod0v59Jb7BG6mQ4tMtji7B/f9CaOD6JOuY9ftXt566F7/UG6JRG3wPRYUhP1

然后用dovecot验证这个哈希是成功的:

$ doveadm pw -t '{SHA512-CRYPT}$6$0e7d3217f1df9e8d$sIrNt9Q1t/lVOy/QKfMFpp.0Qyod0v59Jb7BG6mQ4tMtji7B/f9CaOD6JOuY9ftXt566F7/UG6JRG3wPRYUhP1' -p "123456"

{SHA512-CRYPT}$6$0e7d3217f1df9e8d$sIrNt9Q1t/lVOy/QKfMFpp.0Qyod0v59Jb7BG6mQ4tMtji7B/f9CaOD6JOuY9ftXt566F7/UG6JRG3wPRYUhP1 (verified)

现在,我想再次验证此存储的哈希值,即用户在登录我的应用程序时提供的密码。

然后使用PHP的password_verify函数返回false:

password_verify('123456',  '{SHA512-CRYPT}$6$0e7d3217f1df9e8d$sIrNt9Q1t/lVOy/QKfMFpp.0Qyod0v59Jb7BG6mQ4tMtji7B/f9CaOD6JOuY9ftXt566F7/UG6JRG3wPRYUhP1')

如何正确验证哈希?

1 个答案:

答案 0 :(得分:2)

'{SHA512-CRYPT}' / password_verify无法识别前缀crypt。如果您只是省略它,则哈希验证。即,仅将crypt返回的内容放回password_verify

password_verify('123456', '$6$0e7d3217f1df9e8d$sIrNt9Q1t/lVOy/QKfMFpp.0Qyod0v59Jb7BG6mQ4tMtji7B/f9CaOD6JOuY9ftXt566F7/UG6JRG3wPRYUhP1')
相关问题