使用 php 和 doveadm 创建密码

Using php and doveadm to create password

我在 php 中创建了一个带有 mysql 后端的注册页面。 如果用户输入他的新密码,它应该通过 doveadm 变成 SHA512-CRYPT。

这就是我现在拥有的,

$password=hash('sha256', $pass);

但是我想用 doveadm 创建一个密码散列,因为我的邮件服务器:

$password=(/usr/bin/doveadm pw -s SHA512-CRYPT -p "$pass")

但它似乎不起作用,我如何在 php 中实现此 "doveadm" 命令?

您必须使用 shell_exec 方法调用它:

$password = shell_exec('/usr/bin/doveadm pw -s SHA512-CRYPT -p '. $pass);

避免使用 shell_exec 是危险的,如果您使用 dovecot 的默认配置作为示例中的命令,那么 dovecot 会生成一个包含 16 个字符(字节)盐的散列,因此您可以使用 php 函数 crypt 产生相同的结果,您将避免使用 shell_exec

见下例

echo crypt("1234567890",'$Wh4t3v3rS4ltH3re'); //$ This part declares the SHA 512 and after the second $ must be 16 chars salt

将为您提供与 doveadm pw 命令兼容的结果