PHP7.4实现AES-128-CBC-PKCS5Padding加密
中电联协议要求数据传输的加解密使用对称加解密算法AES128位加解密,加解密模式采用CBC,填充模式采用PKCS5Padding方式。
开始使用的加解密方式如下:
// 加密
public static function encrypt($data,$key,$iv): string
{
$data = openssl_encrypt($data, 'AES-128-CBC', $key, OPENSSL_PKCS1_PADDING, $iv);
return base64_encode($data);
}
// 解密
public static function decrypt($data,$key,$iv)
{
return openssl_decrypt(base64_decode($data), 'AES-128-CBC', $key, OPENSSL_PKCS1_PADDING, $iv);
}
后来联调的时候发现快电请求的数据无法解密,快电同样也无法解密我请求的数据,网上查阅资料发现,在 openssl 中的 aes-128-cbc 的128 指的是密钥大小,也就是说,在使用有效的256位密钥时,它们都是aes-256,而如果要把 mcrypt 转为 openssl 的加密方式,mcrypt 的128 需要写成 openssl 的 256,代码如下:
// 加密
public static function encrypt($data,$key,$iv): string
{
$data = openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_PKCS1_PADDING, $iv);
return base64_encode($data);
}
// 解密
public static function decrypt($data,$key,$iv)
{
return openssl_decrypt(base64_decode($data), 'AES-256-CBC', $key, OPENSSL_PKCS1_PADDING, $iv);
}
最后数据解密成功。
发表评论 取消回复