我可以加密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 =解密:
答案 0 :(得分:0)
我看到两个问题:
a)加密功能将iv分配给本地变量。您可以通过在加密函数的开头包含global $iv_to_pass_to_decryption;
来使其全局化。
b)在decrypt函数的return语句中,你对消息进行base_decode。但是你没有对它进行编码。只需在返回后删除base64_decode。