OpenSSL和Mcrypt不兼容吗?

时间:2014-01-16 02:39:54

标签: php encryption openssl aes mcrypt

我有一个项目涉及客户端使用OpenSSL库使用AES-256加密数据,然后将其传递到Web服务器,然后将其解密并放入数据库。我开始在PHP方面使用Mcrypt,因为它有更好的文档记录。我很快发现我有一个装满垃圾数据的数据库。我整理了一个说明问题的小脚本:

<?php

header("Content-Type: text/plain; charset=utf-8");

$originalText = "The quick brown fox jumped over the lazy dog.";

$aesKey = pack('H*', "503592474D07C14B1997FB690A981F5DBF7D10A95C812D9F0A5F62B551B89970");
$aesIV = pack('H*', "FF964346DB1F2A65B19E67F4F3CA032E");

$cipherText = openssl_encrypt($originalText, "AES-256-OFB", $aesKey, 0, $aesIV);

$plainText = mcrypt_decrypt("rijndael-128", $aesKey, $cipherText, "ofb", $aesIV);
echo $plainText;

?>

理论上,这应该只返回原始文本,但我得到一个垃圾字符串。

I!��/����m�y`Ac��_ UE0o�8*��*B"<[�߲�NM�ʚ�:ľH��|

我现在可以使用openssl_decrypt()解决问题,但我仍然想知道原始代码有什么问题。不同的AES实现应该是可互操作的吗?

1 个答案:

答案 0 :(得分:1)

我的猜测:你需要做'nofb'而不是'ofb'。请参阅https://bugs.php.net/bug.php?id=51146