鸿蒙开发CryptoJS.AES加密和解密

鸿蒙开发CryptoJS.AES加密和解密

直接上代码:

const key = CryptoJS.enc.Utf8.parse('xxxxx'); // 十六位十六进制数作为密钥
const iv = CryptoJS.enc.Utf8.parse('xxxxx'); // 十六位十六进制数作为密钥偏移量

// 解密方法
export function decrypt(src: string) {
    const dec = CryptoJS.AES.decrypt(CryptoJS.format.Hex.parse(src), key, {
        iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return CryptoJS.enc.Utf8.stringify(dec);
}

// 加密方法
export function encrypt(src: string) {
    const enc = CryptoJS.AES.encrypt(src, key, {
        iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return enc.ciphertext.toString();
}
### 使用 CryptoJS 进行 AES 加密及解决请求报文问题 #### 1. CryptoJS AES 加密基础 CryptoJS 是一个功能强大的 JavaScript 庉库,支持多种加密算法,其中包括 AES 对称加密AES 的核心在于通过指定的密钥对数据进行加解密操作[^1]。 以下是使用 CryptoJS 实现 AES 加密的一个简单示例: ```javascript // 引入 CryptoJS 库 const CryptoJS = require("crypto-js"); // 定义明文密钥 let plaintext = "This is a secret message"; let key = CryptoJS.enc.Utf8.parse("1234567890abcdef"); // 密钥长度应满足 AES 要求 (16, 24 或 32 字节) // 加密过程 let ciphertext = CryptoJS.AES.encrypt(plaintext, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }).toString(); console.log("Ciphertext:", ciphertext); // 解密过程 let decryptedText = CryptoJS.AES.decrypt(ciphertext, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8); console.log("Decrypted Text:", decryptedText); ``` 上述代码展示了如何利用 CryptoJS 中的 `AES.encrypt` `AES.decrypt` 方法完成基本的加密解密操作[^2]。 --- #### 2. 请求报文中的 AES 加密应用 在实际开发场景中,通常需要将前端发送的数据进行加密后再传递给后端服务器。以下是一个完整的流程说明: - **前端加密逻辑** 前端可以借助 CryptoJS 将敏感数据(如用户名、密码或其他隐私字段)加密成密文形式再提交到服务端[^3]。 - **后端解密逻辑** 后端接收到加密后的数据后,使用相同的密钥对其进行解密还原原始数据。 下面展示了一个简单的 Postman 测试脚本案例,用于模拟前端对报文进行 AES+Base64 加密的过程: ```javascript if(pm.environment.get('env') === 'product' && pm.request.method === 'POST'){ let data = JSON.stringify(pm.request.body.raw); // 获取请求体 const CryptoJS = require("crypto-js"); let encryptedData = CryptoJS.AES.encrypt(data, "shared-secret-key").toString(); // 加密 let base64EncryptedData = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(encryptedData)); // Base64 编码 console.log("Encrypted Data:", base64EncryptedData); } ``` 此脚本会在特定条件下自动执行加密,并打印最终的结果以便调试验证。 --- #### 3. 常见问题及其解决方案 ##### (1)密钥长度不符合标准 如果使用的密钥长度不是 16/24/32 字节,则会引发错误。可以通过调整输入字符串来匹配所需大小或者填充固定字符补足差额。 ##### (2)模式与填充方式不一致 前后端必须保持一致的加密参数配置,比如 ECB/CBC 模式以及 PCKS7/ZerosPadding 等填充方法设置不同也会造成无法正常解析的情况发生。 ##### (3)跨平台兼容性问题 某些情况下由于编码差异可能导致传输过程中丢失部分信息从而影响最终效果。建议统一采用 UTF-8 格式的文本表示法并辅以必要的转义机制确保一致性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

893151960

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值