【发布时间】:2023-04-28 22:58:01
【问题描述】:
我正在阅读PHP's crypt() 函数。我有几个问题 -
我在大多数示例中看到的盐字符串末尾的尾随“$”符号的意义是什么。该手册没有具体说明用它来结束盐字符串。
-
无论如何我只能从哈希中提取盐部分吗?我知道我可能不需要这样做,因为 crypt() 函数会在进行比较时在内部进行。但只是为了它。只是为了让我看到盐。对于 egs,请考虑此代码 -
$pass = 'secret'; $salt = '$2y$07$usesomesillystringforsalt$'; echo crypt($pass, $salt);
它的输出是$2y$07$usesomesillystringforex.u2VJUMLRWaJNuw0Hu2FvCEimdeYVO,我不确定盐和散列之间的边界。 'forex' 子字符串中的 'e' 是 salt 还是 hash 的一部分?如果我能提取其中的盐部分会容易得多。 -
crypt() 手册也说
... Blowfish 使用盐散列如下:“$2a$”、“$2x$”或“$2y$”、两位数的成本参数、“$”和字母表中的 22 个字符“。 /0-9A-Za-z"....
据此,我预计成本参数后面的 $ 符号后有 22 个字符。但是考虑一下这段代码 -
$pass = 'secret'; $salt = '$2y$07$somesillystring$'; echo crypt($pass, $salt);
其输出为$2y$07$somesillystring$$$$$$.O6JLPmGlDvy4BicGmkuBD.DN8OYiIoG。我的问题是为什么它在成本参数后的 $ 符号后面最多只能填充 21 个字符。我期望它最多可以填充 22 个字符。
【问题讨论】: