1 package com.foxinmy.weixin4j.wxa;
2
3 import java.security.AlgorithmParameters;
4 import java.security.Key;
5 import java.security.Security;
6
7 import javax.crypto.Cipher;
8 import javax.crypto.spec.IvParameterSpec;
9 import javax.crypto.spec.SecretKeySpec;
10
11 import org.bouncycastle.jce.provider.BouncyCastleProvider;
12
13
14
15
16 final class AESUtils {
17
18 private static boolean initialized = false;
19
20 private AESUtils() {
21 }
22
23
24
25
26
27
28
29
30
31 static byte[] decrypt(byte[] content, byte[] keyByte, byte[] ivByte) {
32 initialize();
33 try {
34 Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
35 Key sKeySpec = new SecretKeySpec(keyByte, "AES");
36
37 cipher.init(Cipher.DECRYPT_MODE, sKeySpec, generateIV(ivByte));
38 byte[] result = cipher.doFinal(content);
39 return result;
40 } catch (Exception e) {
41 throw new RuntimeException(e);
42 }
43 }
44
45 private static synchronized void initialize() {
46 if (initialized) {
47 return;
48 }
49
50 Security.addProvider(new BouncyCastleProvider());
51 initialized = true;
52 }
53
54 private static AlgorithmParameters generateIV(byte[] iv) throws Exception {
55 AlgorithmParameters params = AlgorithmParameters.getInstance("AES");
56 params.init(new IvParameterSpec(iv));
57 return params;
58 }
59
60 }