加密/解密错了

时间:2012-08-01 19:00:21

标签: php encryption

我已从this question

的答案中复制了来源

并创建了这两个函数

function my_encrypt($string) {
    $key="1234";
    return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), 
        $string, MCRYPT_MODE_CBC, md5(md5($key))));
}

function my_decrypt($string) {
    $key="1234";
    return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), 
         base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
}

当我尝试使用下面显示的代码进行加密和解密时

 $string="445676467";
    echo $ecr=my_encrypt($string)."<br/>";
    echo my_decrypt($ecr);

生成以下输出

  

01pEoOCsp7oloZTDMAKF / cxgB0YQFScje6Z8GBXu8Tw =

     

445676467>HŽÇeVJMç&GT;ÑÑBHc.-ãyeÇN - =“VSA

错误的是,解密没有给出正确的输出445676467

但是当我直接尝试这个

$key="1234";
    $string="2011";
    $encrypted= base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, 
        md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));

    $decypted= rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), 
        base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
    echo $encrypted."<br/>";
    echo $decypted;

这给出了正确的答案

1 个答案:

答案 0 :(得分:2)

这很有趣,但原因是你的同义词。

我用了你的代码:

     $string="445676467";
//You echo & put value in the var at the same time?? smells like troubles.
        echo $ecr=my_encrypt($string)."<br/>"; 
        echo my_decrypt($ecr);

结果:

01pEoOCsp7oloZTDMAKF/cxgB0YQFScje6Z8GBXu8Tw=
445676467�H���eVJM�>��BHc.��ye�N�=�VS�

并尝试过:

 $string="445676467";
    $ecr=my_encrypt($string);
    echo $ecr;
    echo my_decrypt($ecr);

结果:

01pEoOCsp7oloZTDMAKF/cxgB0YQFScje6Z8GBXu8Tw=
445676467

因此,您的功能没有任何问题,只是用法。 首先将值放入变量中,然后再将其打印出来。