PHP的各種散列函數,如md5()
,sha1()
, hash()
, hash_pbkdf2()
和hash_hmac()
允許您設置$ raw_output = false並獲取原始二進制數據。PHP的散列函數返回的原始輸出是否與pack('H *')相同?
我已經放在一起使用加密和mcrypt
一個hash_pbkdf2
類。當創建密鑰都將下面的代碼工作:
// 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;
}
他們都產生相同的密鑰大小,但他們都做同樣的事情?既然我使用密碼學來安全,那麼要麼比另一個更安全?
你說的是側通道還是'包(「H *」,$鍵);'正常工作? –
我在加密後添加了一個HMAC,所以我認爲(?)它可以抵抗邊信道攻擊。我真的很想知道上面的兩個鍵是否以完全相同的方式生成。即$ raw_output = true與上述上下文中的pack('H *')相同? – texelate
我查看了代碼,它們都基於不同的功能。 'hash_pbkdf2'使用'bin2hex',而'pack'是它自己的事情來反轉'bin2hex'。 –