【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);

  

 

 

posted @   emdzz  阅读(693)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示