gpt4 book ai didi

php - PHP 的散列函数返回的原始输出是否与 pack ('H*' 相同)?

转载 作者:搜寻专家 更新时间:2023-10-31 21:32:23 25 4
gpt4 key购买 nike

PHP 的各种哈希函数,如 md5()sha1()hash()hash_pbkdf2()hash_hmac() 允许您设置 $raw_output = false 并获取原始二进制数据。

我整理了一个使用 mcrypthash_pbkdf2 加密的类。创建 key 时,以下两个代码都有效:

// Version 1
private function createKey($salt, $password) {
// Hash the key
$key = hash_pbkdf2('sha256', $password, $salt, 5000, 32, true);
return $key;
}

// Version 2
private function createKey($salt, $password) {
// Hash the key
$key = hash_pbkdf2('sha256', $password, $salt, 5000);
// Pack the key into a binary hex string
$key = pack('H*', $key);
return $key;
}

它们都产生相同的 key 大小,但它们都在做同样的事情吗?考虑到我将其用于加密,是否比另一个更安全?

最佳答案

如果你想要原始的二进制结果,你应该使用 hash_pbkdf2$raw_output = true。它将生成您想要的字节,无需任何编码。

hash_pbkdf2 在内部使用 bin2hex 将二进制字符串编码为十六进制。这是一个额外的操作。当您随后使用 pack 将十六进制解码为二进制字符串时,您还有另一个不必要的操作。

使用十六进制输出并将其解码回二进制不会提高您的安全性。如果有的话,它可能会减少它,因为密码黑客可能不会使用这些不必要的步骤。

如果您担心 bin2hex 是否真的反转了 pack("H*"),您应该使用 hex2bin 因为它们是 companion functions可能正在相互逆转。

关于php - PHP 的散列函数返回的原始输出是否与 pack ('H*' 相同)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27964577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com