一、首先我们需要安装crypto.js
cnpm install crypto-js --save 或者 npm install crypto-js --save
二、安装成功后,就可以进行应用啦
两种加密方式如下:
ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。
CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或或操作后再加密,这样做的目的是增强破解难度。(不容易主动攻击,安全性好于ECB,是SSL、IPSec的标准)
我们先看第一种方式:ECB模式
注意:密钥key和密钥偏移量iv必须时十六位;(本想把它们设置的复杂一点,尝试设置了特殊字符,但特殊字符导致后台无法解密)
js代码:
const CryptoJS = require('crypto-js') // 引用AES源码js
const key = CryptoJS.enc.Utf8.parse('12345678ABCDEFG') // 十六位十六进制数作为密钥
const iv = CryptoJS.enc.Utf8.parse("1234567887654321");//十六位十六进制数作为密钥偏移量
// 解密方法
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
}
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));
}
第二种方式:CBC模式
js代码:
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
}
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));
}
三、使用
在你需要的地方直接导入js即可:
import encrypt from '@/config/encrypt.js'
let pwdNew = encrypt.Encrypt(this.pwd);