老鬼的博客 来都来啦,那就随便看看吧~
Java和Jquery AES ECB加解密
发布于: 2019-11-07 更新于: 2023-11-08 分类于:  阅读次数: 

一:介绍

1
2
前后台分离,有些数据可能要做加解密处理,下面的方式就是用AES做的加解密,
ECB模式只有加密的密钥没有偏移量。

二:html代码

  • 介绍
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
aes.js是做了改了的方法,加了两个function,具体的function如下:

var defaultKey = "abcdks9abcd11g12";
//java用的加密
function encodeJava(content, key) {
if (!key) {
key = defaultKey
}
var key = CryptoJS.enc.Utf8.parse(key);
var encryptedData = CryptoJS.AES.encrypt(content, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
console.log("加密前:" + content);
console.log("加密后:" + encryptedData);
//encryptedData = encryptedData.ciphertext.toString();
return encryptedData+''
}
//js本身的加密
function encode(content, key) {
if (!key) {
key = defaultKey
}
var key = CryptoJS.enc.Utf8.parse(key);
var encryptedData = CryptoJS.AES.encrypt(content, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
console.log("加密前:" + content);
console.log("加密后:" + encryptedData);
encryptedData = encryptedData.ciphertext.toString();
return encryptedData
}

//js本身的解密
function decode(encryptedData, key) {
if (!key) {
key = defaultKey
}
var key = CryptoJS.enc.Utf8.parse(key);
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedData);
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);
var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);
return decryptedStr
};
  • 代码块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>AES加解密</title>
<script src="aes.js"></script>
</head>
<body>
<script>
//js自身的加解密
var content = 'ABCDEFGH';//待加密的字符串
console.log(content);
console.log(encode(content));
console.log(decode(encode(content)));
//和java相同的加密
console.log(encodeJava(content));
</script>
</body>
</html>

三:java代码

  • pom.xml
1
2
3
4
5
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
  • 代码块
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
package com.vji.snail.utils;

import java.math.BigInteger;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;

public class AESUtils {


//密钥 (需要前端和后端保持一致)
private static final String KEY = "abcdks9abcd11g12";
//算法
private static final String ALGORITHMSTR = "AES/ECB/PKCS5Padding";

/**
* aes解密
* @param encrypt 内容
* @return
* @throws Exception
*/
public static String decrypt(String encrypt) {
try {
return decrypt(encrypt, KEY);
} catch (Exception e) {
e.printStackTrace();
return "";
}
}

/**
* aes加密
* @param content
* @return
* @throws Exception
*/
public static String aesEncrypt(String content) {
try {
return encrypt(content, KEY);
} catch (Exception e) {
e.printStackTrace();
return "";
}
}

/**
* 将byte[]转为各种进制的字符串
* @param bytes byte[]
* @param radix 可以转换进制的范围,从Character.MIN_RADIX到Character.MAX_RADIX,超出范围后变为10进制
* @return 转换后的字符串
*/
public static String binary(byte[] bytes, int radix){
return new BigInteger(1, bytes).toString(radix);// 这里的1代表正数
}

/**
* base 64 encode
* @param bytes 待编码的byte[]
* @return 编码后的base 64 code
*/
public static String base64Encode(byte[] bytes){
return Base64.encodeBase64String(bytes);
}

/**
* base 64 decode
* @param base64Code 待解码的base 64 code
* @return 解码后的byte[]
* @throws Exception
*/
public static byte[] base64Decode(String base64Code) throws Exception{

return StringUtils.isEmpty(base64Code) ? null : Base64.decodeBase64(base64Code);
}


/**
* AES加密
* @param content 待加密的内容
* @param encryptKey 加密密钥
* @return 加密后的byte[]
* @throws Exception
*/
public static byte[] encryptToBytes(String content, String encryptKey) throws Exception {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128);
Cipher cipher = Cipher.getInstance(ALGORITHMSTR);
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), "AES"));

return cipher.doFinal(content.getBytes("utf-8"));
}


/**
* AES加密为base 64 code
* @param content 待加密的内容
* @param encryptKey 加密密钥
* @return 加密后的base 64 code
* @throws Exception
*/
public static String encrypt(String content, String encryptKey) throws Exception {
return base64Encode(encryptToBytes(content, encryptKey));
}


/**
* AES加密为base 64 code
* @param content 待加密的内容
* @return 加密后的base 64 code
* @throws Exception
*/
public static String encrypt(String content) throws Exception {
return base64Encode(encryptToBytes(content, KEY));
}


/**
* AES解密
* @param encryptBytes 待解密的byte[]
* @param decryptKey 解密密钥
* @return 解密后的String
* @throws Exception
*/
public static String decryptByBytes(byte[] encryptBytes, String decryptKey) throws Exception {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128);

Cipher cipher = Cipher.getInstance(ALGORITHMSTR);
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), "AES"));
byte[] decryptBytes = cipher.doFinal(encryptBytes);
return new String(decryptBytes);
}


/**
* 将base 64 code AES解密
* @param encryptStr 待解密的base 64 code
* @param decryptKey 解密密钥
* @return 解密后的string
* @throws Exception
*/
public static String decrypt(String encryptStr, String decryptKey) throws Exception {
return StringUtils.isEmpty(encryptStr) ? null : decryptByBytes(base64Decode(encryptStr), decryptKey);
}


/**
* 测试
*/
public static void main(String[] args) throws Exception {
String content = "ABCDEFGH";
System.out.println("加密前:" + content);
System.out.println("加密密钥和解密密钥:" + KEY);
String encrypt = encrypt(content);
System.out.println("加密后:" + encrypt);
String decrypt = decrypt(encrypt);
System.out.println("解密后:" + decrypt);
}

}

*************感谢您的阅读*************