java下AES加密解密的使用

AES简介

AES是对称加解密,加密和解密共有一个密钥。AES是DES的升级版,具有更高的安全性,更强大的加解密性能。

使用AES实现加解密

AES加解密类库说明

  1. KeyGenerator通用密钥生成器

    • 通过生成器函数确定密钥类型,有AES,DES
    • 通过init函数初始化密钥参数,如长度,密钥种子。
    • generateKey生成密钥
  2. SecureRandom 为密钥随机序列种子,根据输入的byte[]型入参生成标准的密钥种子(固定长度,符合一定规则) 注意 这里有一个SHA1PRNG类型,如果不设置这个,解密会报错。

  3. SecretKeySpec为专有密钥生成器,生成直接用于加密解密的密钥。

  4. Cipher为编解码器 具体见RES.

具体代码实现

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
public class AuthKey {
private static String AES = "AES";
public static void main(String... args) {
String content = "this is a text for auth key ";
String password = "123";
System.out.println("源字符串: " + content);
byte[] encryptByte = encrypt(content.getBytes(), password.getBytes());
System.out.println("加密之后: " + Base64.getEncoder().encode(encryptByte));
byte[] decryptByte = decrpt(encryptByte, password.getBytes());
System.out.println("解密之后: " + new String(decryptByte));
}
public static byte[] encrypt(byte[] content, byte[] password) {
try {
KeyGenerator keyGenerator = KeyGenerator.getInstance(AES);
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
random.setSeed(password);
keyGenerator.init(128, random);
SecretKey secretKey = keyGenerator.generateKey();
byte[] encodeKeyBytes = secretKey.getEncoded();
SecretKeySpec keySpec = new SecretKeySpec(encodeKeyBytes, AES);
Cipher cipher = Cipher.getInstance(AES);
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] result = cipher.doFinal(content);
return result;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
}
return null;
}
public static byte[] decrpt(byte[] content, byte[] password) {
try {
KeyGenerator keyGenerator = KeyGenerator.getInstance(AES);
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
random.setSeed(password);
keyGenerator.init(128, random);
SecretKey secretKey = keyGenerator.generateKey();
byte[] encodeKey = secretKey.getEncoded();
SecretKeySpec keySpec = new SecretKeySpec(encodeKey, AES);
Cipher cipher = Cipher.getInstance(AES);
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] result = cipher.doFinal(content);
return result;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
return null;
}
}

运行结果