哪些迭代规则适用于使用 CRYPT_EXT_DES 的 crypt()?

mgu*_*utt 5 php crypt des

我的测试用例如下:

echo crypt('string', '_....salt');//error
echo crypt('string', '_A...salt');//fast
echo crypt('string', '_AAAAsalt');//slow
Run Code Online (Sandbox Code Playgroud)

解释如http://www.php.net/manual/en/function.crypt.php所述:

CRYPT_EXT_DES - 扩展的基于 DES 的哈希。“salt”是一个 9 个字符的字符串,由下划线后跟 4 个字节的迭代计数和 4 个字节的 salt 组成。这些被编码为可打印字符,每个字符 6 位,最低有效字符在前。值 0 到 63 编码为“./0-9A-Za-z”。在 salt 中使用无效字符将导致 crypt() 失败。

点是可打印字符,那么为什么它会返回错误呢?哪个“顺序”适用于所使用的字符,导致“AAAA”比“A...”有更多的迭代次数?

小智 1

它在引用的段落中说明了所有内容: - 最不重要的字符在前 - 值 0 到 63 被编码为“./0-9A-Za-z”

所以在你的例子中“_...salt”意味着0轮,这显然是行不通的。考虑到最不重要的字符排在前面,“_A...salt”小于“_AAAAsalt”。

“_...Asalt”也将不仅仅是“_A...salt”