在php中使用mcrypt_ecb()函数时,加密和解密的结果是不同的

时间:2013-10-26 07:50:40

标签: php

我正在使用以下功能加密和解密

define('KEYVAL',"hgfzhjh");
function encryption($plain_text)
{
$key_value = KEYVAL;
$encrypted_text = mcrypt_ecb(MCRYPT_DES, $key_value, $plain_text, MCRYPT_ENCRYPT);
return $encrypted_text;
}

function decryption($encrypted_text)
{
$key_value = KEYVAL;
$decrypted_text = mcrypt_ecb(MCRYPT_DES, $key_value, $encrypted_text, MCRYPT_DECRYPT);
return $decrypted_text;
}

echo $id = 'abc';
echo "<br />";    
$enc = encryption('abc');
echo $dec = decryption($enc);   
echo "<br />";
echo $dec;
echo "<br />";
echo strcmp($id,$dec);

虽然 $enc $dec 的回声相同,但 strcmp 的结果为-5。为什么..?

我使用解密结果从数据库中获取数据,但由于两个字符串不相同,因此无法获取数据。 如果我没有正确使用它,请告诉我。

2 个答案:

答案 0 :(得分:1)

修剪加密值

$enc = trim(encryption('abc'));

答案 1 :(得分:1)

如果您有疑问,只需 var_dump 您的字符串。 var_dump($dec)给出 8 的长度,这就是 strcmp 为您提供 -5

这里的解密为字符串末尾提供了额外的空格,因此请使用 rtrim

您需要修剪函数本身的解密字符串!。

function decryption($encrypted_text)
{
$key_value = KEYVAL;
$decrypted_text = mcrypt_ecb(MCRYPT_DES, $key_value, $encrypted_text, MCRYPT_DECRYPT);
return rtrim($decrypted_text); //Trimming here
}

顺便问一下......为什么要添加空格?看看这个thread