本文主要是介绍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,只要加解密出来的结果与嵌入式那边出来的结果一致,就可以愉快的对接了, 关注算法小生不迷路
这篇关于Uniapp使用AES128加解密16进制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!