【发布时间】:2015-03-13 21:55:51
【问题描述】:
PHP 的各种散列函数(如 md5()、sha1()、hash()、hash_pbkdf2() 和 hash_hmac())允许您设置 $raw_output = false 并获取原始二进制数据。
我整理了一个使用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;
}
它们都产生相同的密钥大小,但它们都在做同样的事情吗?考虑到我将其用于加密,是否比另一个更安全?
【问题讨论】:
-
您是在谈论侧通道还是
pack('H*', $key);是否正常工作? -
我在加密后添加了一个 HMAC,所以我认为(?)它可以抵抗侧信道攻击。我真的很想知道上面的两个键是否以完全相同的方式产生。 IE。 $raw_output = true 是否与上述上下文中的 pack('H*') 相同?
-
我查看了代码,它们都基于不同的功能。
hash_pbkdf2使用bin2hex而pack自己来反转bin2hex。 -
谢谢。当加密/解密比另一个更好? PHP 站点 (php.net/manual/en/function.mcrypt-encrypt.php) 上的示例使用了 pack。不过,我没有发现这个例子有很好的记录。
标签: php encryption mcrypt