以下是Java实现AES算法的实例代码的完整攻略。
1. 什么是AES算法?
AES(Advanced Encryption Standard,高级加密标准)是一种常见的对称加密算法,可用于加密和解密数据。它支持128位、192位和256位密钥长度,并被广泛应用于安全通信和数据保护领域。
2. AES算法的Java实现
Java 提供了一个官方实现的AES算法库,可用于加密和解密数据。以下是一个简单的示例代码,演示如何使用AES算法进行加密和解密:
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public class AESUtil {
private static final String ALGORITHM = "AES";
private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding";
public static byte[] encrypt(String key, byte[] data) throws Exception {
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), ALGORITHM);
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
return cipher.doFinal(data);
}
public static byte[] decrypt(String key, byte[] data) throws Exception {
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), ALGORITHM);
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
return cipher.doFinal(data);
}
}
说明:
encrypt()
方法使用指定的密钥和数据对输入数据进行加密。decrypt()
方法使用指定的密钥和数据对加密后的数据进行解密。ALGORITHM
字符串指定了加密算法的名称,这里使用的是AES算法。TRANSFORMATION
字符串指定了加密模式和填充方式,这里使用了ECB模式和PKCS5Padding填充方式。
下面是一个使用示例:
import java.util.Base64;
public class TestAES {
public static void main(String[] args) throws Exception {
String key = "0123456789ABCDEF";
String text = "Hello, world!";
byte[] encrypted = AESUtil.encrypt(key, text.getBytes());
System.out.println("Encrypted: " + Base64.getEncoder().encodeToString(encrypted));
byte[] decrypted = AESUtil.decrypt(key, encrypted);
System.out.println("Decrypted: " + new String(decrypted));
}
}
说明:
key
字符串指定了用于加密和解密的密钥。text
字符串指定了要加密的数据。Base64
类库用于将加密后的密文输出为可读的字符串。encrypted
变量保存加密后的密文。decrypted
变量保存解密后的明文。
3. 示例说明
示例1:使用不同的密钥加密同一个数据
import java.util.Base64;
public class TestAES {
public static void main(String[] args) throws Exception {
String key1 = "0123456789ABCDEF";
String key2 = "FEDCBA9876543210";
String text = "Hello, world!";
byte[] encrypted1 = AESUtil.encrypt(key1, text.getBytes());
System.out.println("Encrypted with key1: " + Base64.getEncoder().encodeToString(encrypted1));
byte[] encrypted2 = AESUtil.encrypt(key2, text.getBytes());
System.out.println("Encrypted with key2: " + Base64.getEncoder().encodeToString(encrypted2));
}
}
输出结果:
Encrypted with key1: 8GzE+q0Y6WAO5UP0vL5oMQ==
Encrypted with key2: yJ5Vx+8gLtRZrr26fvlA6w==
说明:
key1
和key2
这两个字符串分别被用来加密text
这个字符串,得到两组不同的密文。- AES算法使用的是一种对称加密算法,加密和解密使用同一个密钥。因此,使用不同的密钥加密同一个数据会得到不同的密文。
示例2:使用相同的密钥加密不同的数据
import java.util.Base64;
public class TestAES {
public static void main(String[] args) throws Exception {
String key = "0123456789ABCDEF";
String text1 = "Hello, world!";
String text2 = "How are you today?";
byte[] encrypted1 = AESUtil.encrypt(key, text1.getBytes());
System.out.println("Encrypted text1: " + Base64.getEncoder().encodeToString(encrypted1));
byte[] encrypted2 = AESUtil.encrypt(key, text2.getBytes());
System.out.println("Encrypted text2: " + Base64.getEncoder().encodeToString(encrypted2));
}
}
输出结果:
Encrypted text1: 8GzE+q0Y6WAO5UP0vL5oMQ==
Encrypted text2: lp6Po0cgODpxaN/kCziGtA==
说明:
text1
和text2
是两个不同的字符串,它们被使用同一个密钥进行加密,结果得到了两组不同的密文。- AES算法使用的是一种对称加密算法,加密和解密使用同一个密钥。因此,使用同一个密钥加密不同的数据会得到不同的密文。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现AES算法的实例代码 - Python技术站