Laravel + UniApp AES加密/解密

后端 Laravel

php 复制代码
    public function encrypt($data, $method = 'AES-128-CBC', $passwd = 'jiami123456789', $options = 0, $iv = 'jiami12345678900')
    {
        return openssl_encrypt($data, $method, $passwd, $options, $iv);
    }

    public function decrypt($data, $method = 'AES-128-CBC', $passwd = 'jiami123456789', $options = 0, $iv = 'jiami12345678900')
    {
        return openssl_decrypt($data, $method, $passwd, $options, $iv);
    }

使用

php 复制代码
public function index(Request $request)
    {
        // 字符串加密
        $d['string_encryption'] = $this->encrypt('hello');
        $d['string'] = $this->decrypt($d['string_encryption']);

        // 数组加密
        $data = [
            'name' => 'kay',
            'age' => 20,
        ];

        
        $d['array_encryption'] = $this->encrypt(json_encode($data));
        $d['array_decryption'] = $this->decrypt($d['array_encryption']);
        return $d;
    }

UniApp 实现

javascript 复制代码
npm install crypto-js
javascript 复制代码
// /static/crypto.js
/**
 * 工具类
 */
import Vue from 'vue'
import CryptoJS from 'crypto-js'
// 确保密钥长度至少为16字节(AES-128要求)
let keyStr = "jiami12345678900";
let ivStr = "jiami12345678900";

//加密
export function aes_encrypt(word) {
    try {
        var key = CryptoJS.enc.Utf8.parse(keyStr);
        var iv = CryptoJS.enc.Utf8.parse(ivStr);
        var encrypted = CryptoJS.AES.encrypt(word, key, {
            iv: iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
        return encrypted.toString();
    } catch (error) {
        console.error('加密失败:', error);
        throw error;
    }
}

//解密  
export function aes_decrypt(word) {
    try {
        var key = CryptoJS.enc.Utf8.parse(keyStr);
        var iv = CryptoJS.enc.Utf8.parse(ivStr);
        // 完整处理base64格式,替换特殊字符
        var restoreBase64=word.replace(/[\r\n]/g,'');
        
        var decrypt = CryptoJS.AES.decrypt(restoreBase64, key, {
            iv: iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
        return CryptoJS.enc.Utf8.stringify(decrypt).toString();
    } catch (error) {
        console.error('解密失败:', error);
        throw error;
    }
}

使用

javascript 复制代码
import { aes_encrypt, aes_decrypt } from '@/static/crypto.js'
javascript 复制代码
let encrypt = aes_encrypt('hello')
console.log('===加密===', encrypt);
var decrypt = aes_decrypt(encrypt)
console.log('===解密===', decrypt);
相关推荐
望获linux17 小时前
【实时Linux实战系列】使用 u-trace 或 a-trace 进行用户态应用剖析
java·linux·前端·网络·数据库·elasticsearch·操作系统
zxg_神说要有光17 小时前
我好像找到了最适合我的生活状态
前端·javascript
飞哥数智坊17 小时前
今天,我的个人网站正式上线了!
前端
念念不忘 必有回响17 小时前
前端自动化部署全流程(Jenkins + Nginx)
前端·自动化·jenkins
爱上妖精的尾巴17 小时前
5-22 WPS JS宏reduce数组的归并迭代应用(实例:提取最大最小值的记录)
服务器·前端·javascript·笔记·wps·js宏
ღ᭄ꦿ࿐Never say never꧂18 小时前
微信小程序 Button 组件 open-type 完全指南:从用户信息获取到客服分享的实战应用
spring boot·微信小程序·小程序·uni-app·vue3
IT_陈寒18 小时前
Java性能调优:这5个被你忽略的JVM参数让你的应用吞吐量提升50%!
前端·人工智能·后端
叶梅树18 小时前
从零构建量化学习工具:动量策略(Momentum Strategy)
前端·后端·机器学习
MyFreeIT19 小时前
Page光标focus在某个控件
前端·javascript·vue.js
通往曙光的路上19 小时前
day8_elementPlus
前端·javascript·vue.js