【发布时间】:2015-10-09 19:13:14
【问题描述】:
由于 mcrypt 被认为已过时,我的任务是升级当前代码以使用 openssl。听起来很简单,但是……经过几天的尝试和失败,我感觉自己要疯了。
我的问题是:有什么方法可以用以前用 mcrypt 加密的 openssl 数据解密?我已经阅读了很多关于这个问题的帖子,其中大多数人说在运行 mcrypt 之前需要/是以前的手动填充数据。 问题是 mcrypt 数据已经加密(使用 mcrypt 提供的自动空填充)并驻留在数据库中,因此不可能和/或不希望对其进行修改。
提及:
- 使用的算法是带有 32 字节密钥的 rijndael-128 cbc(所以我在 openssl 中使用 aes-256-cbc)。
- 我正在为 php (php-crypto) 使用 openssl 包装器。
- 我已经成功地进行了逆运算(使用 mcrypt 解码 openssl),如果它们是非字母数字字符,则只需剥离结束的解码字符。
- 在 mcrypt-ing 之前手动填充数据,然后使用 openssl 解密它就像一个魅力,但这不是这里的问题。
部分代码sn-ps:
// Simple mcrypt encrypt, decrypt with php-crypto example
// This doesn't work and produces a "Finalizing of cipher failed" error
$data = "This is a text";
$strMcryptData=mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);
$algorithm = 'aes-256-cbc';
$cipher = new Cipher($algorithm);
$sim_text = $cipher->decrypt($strMcryptData, $key, $iv);
// Simple mcrypt encrypt with padding, decrypt with php-crypto
// Works and produces the correct text on decryption
$pad = $blocksize - (strlen($data) % $blocksize);
$text = $data;
$text .= str_repeat(chr($pad), $pad);
$strPaddedData=mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv);
$sim_text = $cipher->decrypt($strPaddedData, $key, $iv);
【问题讨论】:
-
是的,应该可以。您可能需要提供您的代码以便我们为您提供帮助。不要忘记添加示例输入、输出和预期输出。如果你不想,那我不知道你在寻找什么样的答案。
标签: php encryption openssl cryptography mcrypt