我正在使用此代码来解密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"
答案 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的写错加密函数没有取消填充 - 显示垃圾。
因此输入与您期望的字符串不同。