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

你可能感兴趣的:(干货,uni-app,javascript,前端)