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

时间:2014-04-17 13:18:19

标签: php encryption cryptography aes

我尝试使用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 ;

我错过了什么?

1 个答案:

答案 0 :(得分:2)

您应该对加密方法的结果(称为密文)进行64位编码,并在解密之前再次对其进行解码。您当前是64位编码加密函数中的纯文本而不是密文。编码纯文本不是必需的。但是,对于纯文本使用定义良好的是个好主意。

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