我尝试使用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 ;
我错过了什么?
答案 0 :(得分:2)
您应该对加密方法的结果(称为密文)进行64位编码,并在解密之前再次对其进行解码。您当前是64位编码加密函数中的纯文本而不是密文。编码纯文本不是必需的。但是,对于纯文本使用定义良好的character-encoding是个好主意。
$encr = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv));
return $encr