【Java / JavaScript】AES加密解密
Java封装的AES加密解密工具类:
几个重要的参数信息
- 需要指定一个密钥串sKey 密钥内容自定义 数字 + 字母 + 特殊符号
- 加密方式为 AES
- AES下面的模式ECB
- ECB下面指定内嵌内容为PKCS5
package cn.hyite.amerp.common.util;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public class EncryptAESUtil {
public static String sKey = "加密的密钥串,自定义";
public static String Encrypt(String sSrc) {
byte[] raw;
try {
raw = sKey.getBytes("utf-8");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
return Base64.getEncoder().encodeToString(encrypted);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
// 解密
public static String Decrypt(String sSrc) {
try {
byte[] raw = sKey.getBytes("utf-8");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] encrypted1 = Base64.getDecoder().decode(sSrc);
try {
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original, "utf-8");
return originalString;
} catch (Exception e) {
e.printStackTrace();
return null;
}
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
}
工具测试方法:
public static void main(String[] args) throws Exception {
// 需要加密的字串
String cSrc = "999999";
System.out.println(cSrc);
// 加密
String enString = EncryptAESUtil.Encrypt(cSrc);
System.out.println("加密后的字串是:" + enString);
// 解密
String DeString = EncryptAESUtil.Decrypt(enString);
System.out.println("解密后的字串是:" + DeString);
}
JavaScript的AES加密解密工具类:
参考博客:
https://www.cnblogs.com/herenwei-wayne/p/15832466.html
安装CryptoJS组件,先在NPM官网上找到CryptoJS的依赖地址:
https://www.npmjs.com/package/crypto-js
测试方法编写:
import Crypto from 'crypto-js'
test() {
const serverKey = 'cloud9.aesde.2023'
const key = Crypto.enc.Utf8.parse(serverKey)
const iv = Crypto.enc.Utf8.parse(serverKey)
// 生成密文
let encryptedData = Crypto.AES.encrypt('需要被加密的明文', key, {
iv: iv,
mode: Crypto.mode.ECB,
padding: Crypto.pad.Pkcs7
})
encryptedData = encryptedData.toString()
console.log(encryptedData)
const decryptedData = Crypto.AES.decrypt(encryptedData, key, {
iv: iv,
mode: Crypto.mode.ECB,
padding: Crypto.pad.Pkcs7
})
// 解密后的明文
console.log(decryptedData.toString(Crypto.enc.Utf8))
}
测试加密的密文和Java解密能一致之后,我们开始封装方法(aes-util.js):
import Crypto from 'crypto-js'
/**
* 参考:Java JavaScript AES/CBC/PKCS5Padding 加密解密
* https://www.cnblogs.com/herenwei-wayne/p/15832466.html
*
* crypto-js依赖 npm地址
* https://www.npmjs.com/package/crypto-js?activeTab=readme
*
*/
const serverKey = 'cloud9.aesde.2023'
const key = Crypto.enc.Utf8.parse(serverKey)
const iv = Crypto.enc.Utf8.parse(serverKey)
/**
* 使用AES的(ECB模式)(Pkcs7内嵌)算法进行加密
* @param plainText 明文
* @returns {string} 密文
*/
const encryptByEcbPkcs7 = plainText => {
const encryptedData = Crypto.AES.encrypt(plainText, key, {
iv: iv,
mode: Crypto.mode.ECB,
padding: Crypto.pad.Pkcs7
})
return encryptedData.toString()
}
/**
* 使用AES的(ECB模式)(Pkcs7内嵌)算法进行解密
* @param cipherText 密文
* @returns {string} 明文
*/
const decryptByEcbPkcs7 = cipherText => {
const decryptedData = Crypto.AES.decrypt(cipherText, key, {
iv: iv,
mode: Crypto.mode.ECB,
padding: Crypto.pad.Pkcs7
})
return decryptedData.toString(Crypto.enc.Utf8)
}
/**
* 按对象集中导出
*/
export {
encryptByEcbPkcs7,
decryptByEcbPkcs7
}
JS加密与Java解密:
调用时引入需要的方法:
import { encryptByEcbPkcs7 } from '@/utils/encrypt/aes-util'
// 调用时方法
param.password = encryptByEcbPkcs7(param.password)
传入后台解码:
String DeString = EncryptAESUtil.Decrypt(enString);

浙公网安备 33010602011771号