要用openssl替换mcrypt,我要执行以下任务:
用于加密和解密的实际代码类似于
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,$plaintext, MCRYPT_MODE_CBC, $iv);
和
$result_decrypt = mcrypt_decrypt(
'rijndael-128',
$key,
$ciphertext,
'cbc',
$iv
);
很好,一切都很好。现在,我想用openssl解密$密文,我看着MCrypt rijndael-128 to OpenSSL aes-128-ecb conversion并尝试
function decrypt_openssl_rijndael($value, $unserialize = true, $salt)
{
if (!extension_loaded('openssl')) {
throw new \RuntimeException(
'SSL extension is not available.'
);
}
$decrypted = openssl_decrypt($value, 'aes-128-ecb', $salt, OPENSSL_RAW_DATA );
if ($unserialize) {
return unserialize($decrypted);
} else {
return $decrypted;
}
}
我测试了几个选项,但是没有正确解密的字符串。我想我只是想念一件小事,所以如果有人有想法吗?
问候 托马斯
答案 0 :(得分:1)
这应该是评论-但它有点长。
您正在处理一个非常具体的问题-为了解决更大的问题。通常,在StackOverflow上会欢迎像这样具体的问题,但是这样做的结果是,该方法通常隐藏了解决更大问题的更好方法。这看起来像其中之一。
首先,对提供的密钥使用OpenSSL applies some transformations进行加密和解密操作,以使其更难以破解加密。这在加密工具中很常见。 mcrypt可能(确实)有相似之处,尽管我怀疑它可能并非如此。因此,您可能使用相同的密钥和相同的算法,但是得到不同的结果。您链接到的帖子说它适用于256位块。我令人怀疑,您似乎也找到了同样的东西。
除非数据已经加密,否则您不希望解密。它在何处以及如何进行加密大概与mcrypt兼容。您需要问的一个非常重要的问题是,您的后加密实现是否也需要与加密器兼容/是否可以迁移密文/是否可以更改加密器。