前端CryptoJS-AES加解密 对应php的AES-128-CBC加解密踩坑(java也相同加解密)

前端部分注意看填充是pkcs7

有个前提,要看前端有没有转成hex格式,如果没转,php那边就不需要调用特定函数转hex格式的

javascript 复制代码
const keyStr = '5hOwdHxpW0GOciqZ';
    const iv = '0102030405060708';
    //加密
    function Encrypt(word) {
        let key = CryptoJS.enc.Utf8.parse(keyStr);
        let srcs = CryptoJS.enc.Utf8.parse(word);
        let encrypted = CryptoJS.AES.encrypt(srcs, key, {
            iv: CryptoJS.enc.Utf8.parse(iv),
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
        let hexStr = encrypted.ciphertext.toString().toUpperCase();
        return hexStr.toString();
        //  encrypted.ciphertext.toString(); // 返回hex格式的密文
        //encrypted.toString(); //此方式返回base64格式密文
    }

    //解密
    function Decrypt(word) {
        let key = CryptoJS.enc.Utf8.parse(keyStr);
        let encryptedHexStr = CryptoJS.enc.Hex.parse(word);
        var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
        let decrypt = CryptoJS.AES.decrypt(srcs, key, {
            iv: CryptoJS.enc.Utf8.parse(iv),
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
        return CryptoJS.enc.Utf8.stringify(decrypt).toString();
    }

后端php代码

php 复制代码
if (!function_exists('encrypt')) {
    //加密
    function encrypt($data, $method = 'AES-128-CBC', $typeNum = 1)
    {
        $key  = '5hOwdHxpW0GOciqZ';
        $iv   = '0102030405060708';
        $a = openssl_encrypt($data, $method,  $key,  $typeNum, $iv);
        // $base64 = base64_encode(openssl_encrypt($data, $method,  $key,  $typeNum, $iv));
        //先转hex格式 再转大写模式
        return  strtoupper(bin2hex($a)); 
        
    }
}




if (!function_exists('decrypt')) {
    //解密 这里 $typeNum必须为0
    function decrypt($data, $method = "AES-128-CBC", $typeNum = 0)
    {
        $key  = '5hOwdHxpW0GOciqZ';
        $iv   = '0102030405060708';
        $data = base64_encode(hex2bin($data));
        $a = openssl_decrypt($data, $method,  $key, $typeNum,  $iv);
        return $a;
    }
}
相关推荐
细节控菜鸡38 分钟前
【2025最新】ArcGIS for JS 实现随着时间变化而变化的热力图
开发语言·javascript·arcgis
2501_916008891 小时前
Web 前端开发常用工具推荐与团队实践分享
android·前端·ios·小程序·uni-app·iphone·webview
SkylerHu1 小时前
前端代码规范:husky+ lint-staged+pre-commit
前端·代码规范
菜鸟una2 小时前
【微信小程序 + 消息订阅 + 授权】 微信小程序实现消息订阅流程介绍,代码示例(仅前端)
前端·vue.js·微信小程序·小程序·typescript·taro·1024程序员节
Yeats_Liao2 小时前
Go Web 编程快速入门 05 - 表单处理:urlencoded 与 multipart
前端·golang·iphone
飞翔的佩奇2 小时前
【完整源码+数据集+部署教程】【运动的&足球】足球场地区域图像分割系统源码&数据集全套:改进yolo11-RFAConv
前端·python·yolo·计算机视觉·数据集·yolo11·足球场地区域图像分割系统
拉不动的猪2 小时前
h5后台切换检测利用visibilitychange的缺点分析
前端·javascript·面试
桃子不吃李子2 小时前
nextTick的使用
前端·javascript·vue.js
萌新小码农‍2 小时前
SpringBoot+alibaba的easyexcel实现前端使用excel表格批量插入
前端·spring boot·excel
冰暮流星3 小时前
css3新增背景图片样式
前端·css·css3