PBKDF2中的 $key_length 是多少
它说它将从输入中派生,但我看到人们使用 256 或更大的 key_lengths,但是当我输入 256 作为 key_length 时,输出是 512 个字符。这是故意的吗?我可以安全地使用 64 作为 key_length 输出长度为 128 个字符吗?
$key_length 是您希望从 PBKDF2 获得的输出字节数。(请注意,如果 key_length 大于散列算法的输出字节数,则该过程重复两次,从而减慢散列的速度可能超出您的预期。例如,SHA256 给出 32 个字节的输出,因此要求 33 个字节将大约是要求 32 的两倍。)
您提到的长度加倍是因为代码将输出字节转换为十六进制(即每 1 个字节 2 个字符),除非您指定 $raw_output = true。包含的测试向量指定 $raw_output = false,因为十六进制更易于使用和在线发布。根据您在应用程序中存储数据的方式,您可以决定是否要将结果存储为十六进制、base64 或仅原始二进制数据。
在基于密码的密码术规范版本 2.0的 IETF 规范中,密钥长度定义为“派生密钥的八位字节的预期长度,一个正整数,最多 (2^32 - 1) * hLen” 这里 hLen 表示以伪随机函数输出的八位字节。有关 pbkdf2 的更多详细信息,您可以参考如何使用 PBKDF2 安全地存储密码