mcrypt_decrypt返回null repsonse

时间:2017-04-23 20:08:41

标签: php encryption encoding base64

我可以加密php中的字符串,但是在调用解密函数时我无法在php中解密我的字符串,我得到一个空响应。我究竟做错了什么?我的代码如下。

<?php


    $txt = "Hello";
    $mykey = "mysecretkey12345";
    $iv_to_pass_to_decryption = 'mysecretpass23456';





    function encrypt($text, $key)
    {
        $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), MCRYPT_RAND); 
        $iv_to_pass_to_decryption = base64_encode($iv);
        return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $iv));

    }


    function decrypt($text, $key, $ivdecrypt)
    { 
        $text = base64_decode($text);
        $ivdecrypt = base64_decode($ivdecrypt);
        return base64_decode(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $ivdecrypt));
    }



    $encryptdata = encrypt($txt, $mykey); // encrypt works fine

    $decryptdata = decrypt($encryptdata, $mykey, $iv_to_pass_to_decryption); // Im getting null response from decrypt

    echo 'Encrypt: ' . $encryptdata . ' Decrypt: ' . $decryptdata;



?>

回波输出示例如下:

加密:j42DGZVT / cKIWEe5p3289aWGOZCtZ8yN3MuUidi2InM =解密:

1 个答案:

答案 0 :(得分:0)

我看到两个问题: a)加密功能将iv分配给本地变量。您可以通过在加密函数的开头包含global $iv_to_pass_to_decryption;来使其全局化。

b)在decrypt函数的return语句中,你对消息进行base_decode。但是你没有对它进行编码。只需在返回后删除base64_decode。