【Java / JavaScript】AES加密解密
Java封装的AES加密解密工具类:
几个重要的参数信息
- 需要指定一个密钥串sKey 密钥内容自定义 数字 + 字母 + 特殊符号
- 加密方式为 AES
- AES下面的模式ECB
- ECB下面指定内嵌内容为PKCS5
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 44 45 46 47 48 | 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 ; } } } |
工具测试方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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加密解密工具类:
参考博客:
1 | https: //www .cnblogs.com /herenwei-wayne/p/15832466 .html |
安装CryptoJS组件,先在NPM官网上找到CryptoJS的依赖地址:
1 | https: //www .npmjs.com /package/crypto-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 | 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):
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 44 45 46 47 48 49 50 | 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解密:
调用时引入需要的方法:
1 2 3 4 | import { encryptByEcbPkcs7 } from '@/utils/encrypt/aes-util' // 调用时方法 param.password = encryptByEcbPkcs7(param.password) |
传入后台解码:
1 | String DeString = EncryptAESUtil.Decrypt(enString); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!