首页 > 其他分享 >egg.js+vue 实现crypto.js 对称加密

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

时间:2023-01-06 10:46:15浏览次数:46  
标签:vue crypto iv let 密钥 key CryptoJS js data

对称加密

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

 

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


标签:vue,crypto,iv,let,密钥,key,CryptoJS,js,data
From: https://www.cnblogs.com/luoguixin/p/17029745.html

相关文章

  • 面了几个说自己精通 Vue 的同学,实在一言难尽……
    请说一下响应式数据的原理......
  • VUE中的键盘事件(按键别名)
    1.vue中常用的按键别名:回车=>enter删除=>delete(捕获“删除”和“退格”键)退出=>esc空格=>space换行=>tab  //不适合用keyup事件,tab会切走当前选中的......
  • Json-Tutorial04 Unicode解析
    前言本节实际上做的工作是上一节的遗留工作:\u转义字符的解析。UTF-8的解析规则在本教程所设计的Json库中,只涉及UTF-8的解析。具体的解析规则教程中都已经说的非常清楚了......
  • vue2中的mixin
    1.mixin的用处:主要用于多个组件内存在重复JS业务逻辑(可以包括methods,mounted,watch等等),将该JS部分代码封装在一个js文件下对外暴露,需要使用的组件进行引用。混入(mixin)......
  • 基于vue+Element UI的文件上传(可拖拽上传)
    (文章目录)实现效果一、先创建一个Dialog对话框进行存放<template><!--导入遮罩层--><el-dialog:title="$t('to_lead')":visible.sync="Ba......
  • VUE中的事件修饰符
    prevent:阻止默认事件(常用)<ahref="http://baidu.com"@click.prevent="showInfo">点我提示信息</a>//增加prevent后阻止a标签的默认事件stop:阻止事件冒泡(常用)<di......
  • 4_jsonp跨域处理
    ​  jsonp跨域处理4.4.1什么是跨域?出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览......
  • 4_jsonp跨域处理
    ​  jsonp跨域处理4.4.1什么是跨域?出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览......
  • vue 中安装并使用echart
    本文为博主原创,转载请注明出处:1.安装echart依赖:安装命令: npminstallecharts--save在vscode的终端窗口进行执行,如图所示: 执行完之后,查看项目中......
  • 4_JSON格式
    ​ AJAX数据格式处理响应普通文本数据如果服务器给我们响应的数据非常简答,那么使用字符串就好了,不需要我们做复杂的处理,后台编码也简单.页面代码 <%@pagecon......