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);
    }

最后数据解密成功。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部