【发布时间】:2019-04-18 10:18:39
【问题描述】:
要将 mcrypt 替换为 openssl,我有以下任务:
加解密的实际代码是这样的
$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解密$ciphertext,我看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;
}
}
我测试了几个选项,但没有得到正确解密的字符串。我想我只是错过了一件小事,所以如果有人有想法?
问候 托马斯
【问题讨论】:
-
这里有一些有趣的东西。使用
aes-256-ecb而不是 128。块大小是一回事。 -
NNNNNOOOOOOO!!!!!!!!!更长的密钥更难通过暴力破解,但 AES128 已经需要即使是 SciFi 也无法想象暴力破解的能量和计算资源。 OTOH,还有其他方法可以破解密码学。在 AES 的情况下,较长的块/密钥比较短的块/密钥更容易受到当前已知的攻击:schneier.com/blog/archives/2009/07/another_new_aes.html
-
嗨stackoverflow.com/users/4729332/andrei我有testet这个选项,但没有成功。