我有一个项目涉及客户端使用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实现应该是可互操作的吗?