前言
因在项目中需要针对重要数据进行加解密传输处理,尤其在与后台交互的同时也需要进行加解密处理(需要后端开发者配合完成),为此讲解下AES前端加密解密的使用方法和流程。
加解密的两种模式区别
ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。
CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或或操作后再加密,这样做的目的是增强破解难度。(不容易主动攻击,安全性好于ECB,是SSL、IPSec的标准)
第一步
安装crypto-js
第二步
在src目录下新建个放公用js文件夹(common)或者项目对应的公共文件夹,再建一个cryptojs文件夹,例如
第三步
在cryptojs文件夹下面的index.js中填写如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| import CryptoJS from 'crypto-js'
const KEY = CryptoJS.enc.Utf8.parse('fb256a9a1fad11ea')
export function Encrypt (word, keyStr) { let key = KEY
if (keyStr) { key = CryptoJS.enc.Utf8.parse(keyStr) }
let srcs = CryptoJS.enc.Utf8.parse(word) let encrypted = CryptoJS.AES.encrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }) return CryptoJS.enc.Base64.stringify(encrypted.ciphertext) }
export function Decrypt (word, keyStr) { let key = KEY
if (keyStr) { key = CryptoJS.enc.Utf8.parse(keyStr) }
let base64 = CryptoJS.enc.Base64.parse(word) let src = CryptoJS.enc.Base64.stringify(base64)
let decrypt = CryptoJS.AES.decrypt(src, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 })
let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8) return decryptedStr.toString() }
|
第四步
在需要的地方引入
1
| import { Encrypt, Decrypt } from '@/common/js/cryptojs'
|
第五步
在代码中进行调用
1 2 3 4 5
| console.log('Encrypt:', Encrypt('admincbs'))
console.log('Decrypt:', Decrypt('OyQihkYOA2QN2UBFqxDtyA=='))
|