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 @   不再犯错  阅读(430)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2017-01-06 jquery版固定边栏滚动特效
点击右上角即可分享
微信分享提示