因此,随着时间的推移,mcrypt将在PHP7.2中运行。当然,还有一种选择: openssl。
我发现很难从mcrypt切换到openssl,使用AES 256 CBC并保留IVs。我对密码学有点陌生,所以我并不是什么都知道,但我了解基本知识。
假设我有以下代码
function encrypt($masterPassword, $data)
{
$keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($ivSize, MCRYPT_DEV_URANDOM);
$key = mb_substr(hash('SHA256', $masterPassword), 0, $keySize);
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_CBC, $iv);
return base64_encode($iv . $encrypted);
}
function decrypt($masterPassword, $base64)
{
$keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$key = mb_substr(hash('SHA256', $masterPassword), 0, $keySize);
$data = base64_decode($base64);
$iv = substr($data, 0, $ivSize);
$encrypted = substr($data, $ivSize, strlen($data));
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_CBC, $iv);
return trim($decrypted);
}如何将此代码“转换”为使用mcrypt中的openssl?
发布于 2017-03-09 13:37:05
您不能转换它,因为Rijndael-256不是AES-256,而且OpenSSL扩展也不支持Rijndael-256。
AES-256是具有256位(32字节)密钥的Rijndael-128 .
不幸的是,你必须重新加密你所有的数据。
编辑:另外,您目前使用的方案存在一些问题:
mb_substr())好消息是OpenSSL会自动为您做PKCS#5填充,但是您应该更进一步,使用像defuse/php-加密这样的可靠加密库。
https://stackoverflow.com/questions/42696657
复制相似问题