egg.js+vue 实现crypto.js 对称加密

对称加密

对称加密算法,加解密都用同一个密钥。

 

node:

let crypto = require('crypto')
// data:需要加解密的内容,
// key: 密钥
// 初始化向量(iv)
function aesEncrypt(data, key, iv) {
  // 给定的算法,密钥和初始化向量(iv)创建并返回Cipher对象
  const cipher = crypto.createCipheriv('aes-192-cbc', key, iv)
  // Key length is dependent on the algorithm. In this case for aes192, it is 24 bytes (192 bits).
  // 指定要摘要的原始内容,可以在摘要被输出之前使用多次update方法来添加摘要内容
  // 数据的编码 utf8 返回值的编码 hex
  var crypted = cipher.update(data, 'utf8', 'hex')
  crypted += cipher.final('hex')
  return crypted
}

function aesDecrypt(data, key, iv) {
  // 给定的算法,密钥和初始化向量(iv)创建并返回Cipher对象
  const decipher = crypto.createDecipheriv('aes-192-cbc', key, iv)
  //                              数据的编码 hex 返回值的编码 utf8
  var decrypted = decipher.update(data, 'hex', 'utf8')
  decrypted += decipher.final('utf8')
  return decrypted
}
const IV = 'f710b45f04e37709' // 初始化向量(iv)
let data = 'luoxiaobu' // 需要加解密的内容,
let key = '123456789987654321123456' // 24 位秘钥密钥

let encryptData = aesEncrypt(data, key, IV)
let decryptData = aesDecrypt(encryptData, key, IV)

console.log(encryptData)
console.log(decryptData)
复制代码

输出:

b98a1d87ea00fb47ade2d9cff0a9179d
luoxiaobu
复制代码

crypto-js:

const CryptoJS = require('crypto-js')
const IV =  CryptoJS.enc.Utf8.parse('f710b45f04e37709') // 十六位十六进制数作为密钥偏移量
let data = 'luoxiaobu' // 需要加解密的内容,
let key =  CryptoJS.enc.Utf8.parse('123456789987654321123456') // 24 位秘钥密钥

function decrypt(data, key, iv) {
  let dataHexStr = CryptoJS.enc.Hex.parse(data);
  let dataBase64 = CryptoJS.enc.Base64.stringify(dataHexStr);
  // 接收的数据是 base64
  let decrypt = CryptoJS.AES.decrypt(dataBase64, key, { iv: iv, mode: CryptoJS.mode.CBC});
  let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
  return decryptedStr.toString();
}

//加密方法
function encrypt(data, key, iv) {
  let encrypted = CryptoJS.AES.encrypt(data, key, { iv: iv, mode: CryptoJS.mode.CBC});
  return  encrypted.ciphertext.toString().toUpperCase();;
}

let encryptData = encrypt(data, key, IV)
let decryptData = decrypt(encryptData, key, IV)

console.log(encryptData)
console.log(decryptData)
复制代码

输出:

b98a1d87ea00fb47ade2d9cff0a9179d
luoxiaobu
复制代码

补充:

AES是一种常用的对称加密算法。加密的分组模式有ECB/CBC/CFB/OFB

分组密码又称为秘密钥密码或对称密码。利用分组密码对明文进行加密时,首先需要对明文进行分组,每组的长度都相同,然后对每组明文分别加密得到等长的密文,分组密码的特点是加密密钥与解密密钥相同。 分组密码的安全性应该主要依赖于密钥,而不依赖于对加密算法和解密算法的保密。因此,分组密码的加密和解密算法可以公开。

node cropty Cipher 类 ,node cropty Decipher类 具体使用参考文档

 

参考博主 https://juejin.cn/post/6844904013054345223


posted @ 2023-01-06 10:37  不再犯错  阅读(474)  评论(0)    收藏  举报