请通过mcrypt_decrypt解释这个奇怪的输出

时间:2013-01-27 08:12:30

标签: php encryption mcrypt rawurl

我正在使用此代码来解密GET发送的信息:

$key              ="key";
$ema              =$_GET['email'];
$iv               =$_GET['iv'];
$ema              =substr($ema,1,-1);
$iv               =substr($iv,1,-1);
$ema              =rawurldecode($ema);
$cipher_alg       = MCRYPT_RIJNDAEL_128;
$decrypted_string = mcrypt_decrypt($cipher_alg, $key, $ema, MCRYPT_MODE_CBC, $iv);

echo $decrypted_string;

例如,这会输出hello@xyz.com。但是,当我将此字符串与if语句进行比较时:

if($decrypted_string=="hello@xyz.com")
echo "Match";
else
echo "No match";

这会输出一个奇怪的答案No match。我无法理解为什么会这样。 这是var_dump($ decrypted_string):

的结果
string(32) "priyam@itbhu.ac.in" 

2 个答案:

答案 0 :(得分:1)

请注意mcrypt_decrypt将被填充到模式的块大小,如http://php.net/manual/en/function.mcrypt-decrypt.php

中所述
  

将使用给定的密码和模式解密的数据。如果   数据的大小不是n * blocksize,数据将被填充   '\ 0'。

一种解决方案是在解密之后修剪数据,如果你可以保证原始数据永远不会以尾随空格结尾,如果不能,你可以将前几个字节专用于原始数据的长度并在解密后使用它。请注意,由于您选择的块大小为128位,因此数据将是32字节的倍数(8位到一个字节)。

答案 1 :(得分:0)

如果我正确地按照您的问题,您会收到错误,因为"hello@xyz.com""priyam@itbhu.ac.in"不同。如果某些东西解密为可读的东西,你可以非常肯定输入和密钥是正确的,否则它会失败或者 - 如果PHP的写错加密函数没有取消填充 - 显示垃圾。

因此输入与您期望的字符串不同。