You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SHA512 crypt的盐值在ASCII 32-127范围内有哪些禁用字符?

SHA512 crypt 盐值(对接Dovecot场景)禁用字符说明

ASCII 32-127区间内的禁用字符列表

标准SHA512 crypt算法本身的盐值规则和Dovecot的解析规则叠加后,以下字符属于明确禁用范围:

  • ::你已经发现的冲突点,Dovecot的密码存储文件(如dovecot-passwd)使用冒号作为字段分隔符,盐值或哈希中出现冒号会直接导致字段解析错位,服务运行报错。
  • $:SHA512 crypt的哈希输出格式本身使用$作为分段标识符,固定格式为$6$<盐值>$<哈希结果>,如果盐值中包含$会导致crypt库、Dovecot都无法正确识别盐值的边界,解析直接失败。
  • 空格(ASCII 32):Dovecot的配置和密码文件读取逻辑会默认忽略行首尾的空白字符,盐值中如果包含空格,大概率会被截断或识别错误,最终导致哈希校验不通过。

PHP生成适配Dovecot的盐值最佳实践

推荐直接使用a-z、A-Z、0-9、.、/共64个字符作为盐值的可选字符集,完全兼容crypt算法和Dovecot的解析规则,不会出现任何兼容性问题,参考生成代码如下:

// 生成16位符合要求的随机盐值(SHA512 crypt盐值最长支持16位)
$saltChars = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
$salt = '';
for ($i = 0; $i < 16; $i++) {
    $salt .= $saltChars[random_int(0, 63)];
}
// 生成最终可对接Dovecot的SHA512 crypt哈希
$dovecotHash = crypt($originalPassword, '$6$'.$salt.'$');

内容的提问来源于stack exchange,提问作者user2772439

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:24:03