【问题标题】:encrypted and decrypted results are different when using mcrypt_ecb() function in php在 php 中使用 mcrypt_ecb() 函数时,加密和解密结果不同
【发布时间】:2013-10-26 16:14:38
【问题描述】:

我正在使用以下函数进行加密和解密

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。为什么..?

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

【问题讨论】:

  • 自 PHP 5.5.0 起,该函数已被弃用。强烈建议不要依赖这个函数

标签: php


【解决方案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

【讨论】:

    【解决方案2】:

    修剪你的加密值

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

    【讨论】:

      猜你喜欢
      • 2014-03-25
      • 2012-04-22
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 2014-02-01
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      相关资源
      最近更新 更多