0

另一方面,我正在使用此代码解密 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" 
4

2 回答 2

1

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

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

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

于 2013-01-27T08:31:59.277 回答
0

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

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

于 2013-01-27T16:58:59.500 回答