使用mcrypt和phpseclib无法获得相同的加密结果

时间:2012-02-16 04:57:20

标签: php encryption mcrypt

我有一个使用mcrypt加密输入字符串的实现。不幸的是我不能再使用它了,因为服务器上没有安装mcrypt,我无法安装它。 所以我看了一下phpseclib,但遗憾的是我没有获得相同的加密字符串。这是我的代码:

include('Crypt/AES.php');

$key256 = "1234567890123456";
$iv =  "6543210987654321";

$cleartext = "This a teststring :)";

echo $cleartext . "<br /><br />";

$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');

if (mcrypt_generic_init($cipher, $key256, $iv) != -1)
{
  // PHP pads with NULL bytes if $cleartext is not a multiple of the block size..
  $cipherText = mcrypt_generic($cipher,$cleartext );
  mcrypt_generic_deinit($cipher);
}

$enc64 = bin2hex($cipherText);
echo $enc64 . "<br />";

while (strlen($cleartext) % 16 != 0) {
  $cleartext .= "\0";
}

$aes = new Crypt_AES();
$aes->setKey($key256);
$aes->setIV($iv);
$cipherText = $aes->encrypt($cleartext);
$enc64 = bin2hex($cipherText);
echo $enc64;

运行脚本后(在已安装mcrypt的开发服务器上),我得到以下输出:

  

这是一个测试字符串:)

     

0fc60e5a06eca68d4aada496e0e83ea65806abfe7d8f72723da470e6c9e86372   0fc60e5a06eca68d4aada496e0e83ea65806abfe7d8f72723da470e6c9e8637231b74e99d9b729813e974f211550d175

正如您所看到的,两个加密字符串都是相同的。几乎。用phpseclib加密的那个是一个块太长了,我不知道为什么。我已经尝试过不同的键和块大小。我也试过使用Crypt_Rijndael类的phpseclib。希望你们中的一位能指出我正确的方向。

1 个答案:

答案 0 :(得分:0)

复制评论:您是否检查过您在两个版本中使用相同的填充。