当前位置: 首页 > news >正文

Uniapp使用AES128加解密16进制

在对接低功耗蓝牙时,我们需要对蓝牙传输数据进行加解密,由于我们对接的命令是16进制,如5500020101aa00,每个16进制表示特定的含义,所以直接对16进制加解密

import CryptoJS from 'crypto-js'// AES128 加密函数
function aes128Encrypt(hexData, key, iv) {// 将十六进制字符串转换为字节数组var data = CryptoJS.enc.Hex.parse(hexData);// 将密钥和 IV(初始向量)转换为字节数组var keyBytes = CryptoJS.enc.Hex.parse(key);var ivBytes = CryptoJS.enc.Hex.parse(iv);// 执行 AES-128 加密,使用 CBC 模式和 PKCS7 填充var encrypted = CryptoJS.AES.encrypt(data, keyBytes, {iv: ivBytes,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});// 将加密后的字节数组转换为十六进制字符串var encryptedHex = encrypted.ciphertext.toString();return encryptedHex;
}// AES128 解密函数
function aes128Decrypt(encryptedHex, key, iv) {// 将密文的十六进制字符串转换为字节数组var encryptedBytes = CryptoJS.enc.Hex.parse(encryptedHex);// 将密钥和 IV(初始向量)转换为字节数组var keyBytes = CryptoJS.enc.Hex.parse(key);var ivBytes = CryptoJS.enc.Hex.parse(iv);// 将字节数组转换为加密的参数对象var encryptedData = CryptoJS.lib.CipherParams.create({ciphertext: encryptedBytes});// 执行 AES-128 解密,使用 CBC 模式和 PKCS7 填充var decrypted = CryptoJS.AES.decrypt(encryptedData, keyBytes, {iv: ivBytes,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});// 将解密后的字节数组转换为十六进制字符串var decryptedText = decrypted.toString(CryptoJS.enc.Hex);return decryptedText;
}export function aesDecrypt(encryptedHex) {// 解密//const key = 'suanfaxiaosheng@' // AES 密钥,必须是 16 字节(128 位)const key = "7375616e66617869616f7368656e6740"//const iv = 'suanfaxiaosheng@' // 初始化向量,必须是 16 字节(128 位)const iv = "7375616e66617869616f7368656e6740"const decryptedData = aes128Decrypt(encryptedHex, key, iv)return decryptedData
}export function aesEncrypt(hexData) {// 加密//const key = 'suanfaxiaosheng@' // AES 密钥,必须是 16 字节(128 位)const key = "7375616e66617869616f7368656e6740"//const iv = 'suanfaxiaosheng@' // 初始化向量,必须是 16 字节(128 位)const iv = "7375616e66617869616f7368656e6740"const encryptedData = aes128Encrypt(hexData, key, iv) return encryptedData
}

OK,只要加解密出来的结果与嵌入式那边出来的结果一致,就可以愉快的对接了, 关注算法小生不迷路

http://www.lryc.cn/news/220533.html

相关文章:

  • C++基础——类与对象
  • 人工智能-卷积神经网络
  • MySQL的event的使用方法
  • Leetcode Daily Challenge 1845. Seat Reservation Manager
  • Blender vs 3ds Max:谁才是3D软件的未来
  • MapReduce:大数据处理的范式
  • 【已解决】ModuleNotFoundError: No module named ‘dgl‘
  • R 复习 菜鸟教程
  • 第十二章《搞懂算法:朴素贝叶斯是怎么回事》笔记
  • 【从0到1开发一个网关】网关Mock功能的实现
  • 前端框架Vue学习 ——(三)Vue生命周期
  • 相机滤镜软件Nevercenter CameraBag Photo mac中文版特点介绍
  • 游戏专用....
  • 第三方登录和第三方支付
  • SpringMvc执行流程(含过滤器Filter+拦截器interceptor)
  • 【UDS基础】简单介绍“统一诊断服务“
  • 深度学习框架TensorFlow.NET之数据类型及张量2(C#)
  • Pandas指定多列组合形成新列
  • 硕鼠——视频下载利器
  • Android 13.0 Launcher3 app图标长按去掉应用信息按钮
  • 10 DETR 论文精读【论文精读】End-to-End Object Detection with Transformers
  • 高数笔记05:不定积分与定积分
  • 【代码随想录】算法训练计划13
  • Python图像处理之OpenCV模块
  • 动态规划-丑数
  • 【MogDB/openGauss的三种函数稳定性关键字】
  • java-对Integer.MAX_VALUE做加法
  • 【学习笔记】[COCI2018-2019#1] Teoretičar
  • 64位Office API声明语句第112讲
  • C++ day3作业