1.vue 安装crypto.js
cnpm install crypto-js --save
ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。
CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或或操作后再加密,这样做的目的是增强破解难度。(不容易主动攻击,安全性好于ECB,是SSL、IPSec的标准)
2.新建js文件。
ECB模式:
const CryptoJS = require('crypto-js') // 引用AES源码js const key = CryptoJS.enc.Utf8.parse('1234567812345678') // 十六位十六进制数作为密钥 const iv = CryptoJS.enc.Utf8.parse("1234567812345678");//十六位十六进制数作为密钥偏移量 // 解密方法 function Decrypt(word) { let decrypt = CryptoJS.AES.decrypt(word, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }) let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8) return decryptedStr.toString() } // 加密方法 function Encrypt(word) { let encrypted = CryptoJS.AES.encrypt(word, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return encrypted.toString() } export default { Decrypt, Encrypt }
3.java端工具类
private final static String password = "1234567812345678";//目前使用 private final static String IV = "1234567812345678";//目前使用 public static String decryptAES(String content) throws Exception { byte[] contentNew = Base64.decodeBase64(content); SecretKeySpec skeySpec = new SecretKeySpec(password.getBytes("UTF-8"), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); // "算法/模式/补码方式" cipher.init(Cipher.DECRYPT_MODE, skeySpec); return new String(cipher.doFinal(contentNew)); }
4.CBC模式
const CryptoJS = require('crypto-js') // 引用AES源码js const key = CryptoJS.enc.Utf8.parse('1234567812345678') // 十六位十六进制数作为密钥 const iv = CryptoJS.enc.Utf8.parse("1234567812345678"); //十六位十六进制数作为密钥偏移量 // 解密方法 function Decrypt(word) { var encryptedHexStr = CryptoJS.enc.Hex.parse(word); var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr); let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }) let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8) return decryptedStr.toString() } // 加密方法 function Encrypt(word) { let encrypted = CryptoJS.AES.encrypt(word, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }) return encrypted.toString() } export default { Decrypt, Encrypt }
5.java端
private final static String password = "12334567812345678";//目前使用 private final static String IV = "12334567812345678";//目前使用 public static String decryptAES(String content) throws Exception { SecretKeySpec skeySpec = new SecretKeySpec(password.getBytes("ASCII"), "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); IvParameterSpec iv = new IvParameterSpec(IV.getBytes()); cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv); byte[] encrypted1 = Base64.decodeBase64(content);//先用bAES64解密 return new String(cipher.doFinal(encrypted1)); }
6.前端使用
import encrypt from '@/config/encrypt.js' let pwdNew = encrypt.Encrypt(this.pwd);