解密不适用于PHP中的AES 128位CBC


Decryption is not working with AES 128 bit CBC in PHP

我正在尝试使用PHP中的AES 128 bit CBC加密来加密和解密令牌。如果我尝试加密和解密令牌,结果不是原始令牌。这是我的代码:

$decrKey = "123456789abcdefg";
$decrIV = "xyz123456789abcd";
function encryptAES($data,$key,$iv)
{
$decr= mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, base64_encode($data), MCRYPT_MODE_CBC, $iv);    
return $decr;   
}    
function decryptAES($data,$key,$iv)
{
$decr= mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($data), MCRYPT_MODE_CBC, $iv);    
return $decr;   
}      
$token = "abcdefghijk";
echo $token;
$tokenEncrypt = encryptAES($token,$decrKey,$decrIV);
echo "encrypt: ".$tokenEncrypt ;
$tokenDecrypt = decryptAES($tokenEncrypt,$decrKey,$decrIV);
echo "decrypt: ".$tokenDecrypt ;

我想念什么?

您应该对加密方法的结果(称为密文)进行base64编码,并在解密前再次解码。您当前在加密函数中以64为基数对纯文本进行编码,而不是对密文进行编码。无需对纯文本进行编码。然而,对纯文本使用定义良好的字符编码是个好主意。

$encr = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv));
return $encr