Java 实现 AES 算法

密码学课上学习了AES算法,balabala原理上有些听不懂,如果是日常应用,可以用java实现好的东西来搬过来用。

首先建了一个自己的AES工具类,里面写上了静态的加密和解密函数供之后使用。

AES工具类和加解密函数如下:

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
public class MyAESUtils {
public static byte[] encrypt(String content, String password) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(password.getBytes())); SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");
byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] result = cipher.doFinal(byteContent);
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

public static byte[] decrypt(byte[] content, String password) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] result = cipher.doFinal(content);
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

以上的类库不需要额外的jar包,直接在Eclipse里按Ctrl+O快捷键自动导入就好了。接下来实现主函数:

public class AESMain {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("请输入明文");
        String content = in.nextLine();
        System.out.println("请输入密钥");
        String key = in.nextLine();

        byte[] encryptResult = MyAESUtils.encrypt(content, key);
        System.out.println("加密后密文为: " + encryptResult);

        byte[] decryptResult = MyAESUtils.decrypt(encryptResult, key);
        System.out.println("解密后原文为: " + new String(decryptResult));

    }
}

很简单的一段代码就实现了基于AES算法的加解密,不过仅仅这样做还是不懂AES的原理的,就需要阅读源码看一下了。不过应用的话,这样基本上就行了。

###个人github: http://github.com/icodeu

###代码托管地址:https://github.com/icodeu/AES4JAVA

###CSDN博客:http://blog.csdn.net/icodeyou

###个人微信号:qqwanghuan 只为技术交流

image