前端和node端分别实现对称加解密方法

3 篇文章 0 订阅

前端和node端分别实现对称加解密方法

前端:

首先先下载一下crypto-js.js插件,然后再index.html文件导入

<script src="./utils/crypto-js.js"></script>

然后在js文件写入一下方法:

var global_key = CryptoJS.enc.Utf8.parse('123456d899876b43211d1234')
var global_IV = CryptoJS.enc.Utf8.parse('1234b45f04e31234')

function decrypt(data, key, iv) {
  let dataHexStr = CryptoJS.enc.Hex.parse(data);
  let dataBase64 = CryptoJS.enc.Base64.stringify(dataHexStr);
  let decrypt = CryptoJS.AES.decrypt(dataBase64, key, { iv: iv, mode: CryptoJS.mode.CBC});
  let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
  return decryptedStr.toString();
}

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

let data = {
                a:1,
                b:2
            }
let str = encrypt(JSON.stringify(data), global_key, global_IV); 
let word = JSON.parse(decrypt(localStorage.ringOffObj, global_key, global_IV));
console.log(str)
console.log(word)
  • global_key是秘钥
  • global_IV是向量
  • decrypt解密方法
  • encrypt加密方法
  • 示例里采用的是加解密object类型数据,如果只是字符串或数字等类型,就没必要使用JSON.stringify和JSON.parse方法进行类型转换了。

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 = '1234b45f04e31234' // 初始化向量(iv)
let data = {
                a:1,
                b:2
            } // 需要加解密的内容,
let key = '123456d899876b43211d1234' // 24 位秘钥密钥

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

console.log(encryptData)
console.log(decryptData)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值