Java 实现对称加密算法攻略
对称加密算法指使用同一个密钥进行加解密的加密算法。本攻略将介绍 Java 如何实现对称加密算法,主要包括以下内容:
- 对称加密算法的种类
- Java 中实现对称加密的常用类库
- 对称加密算法的实现步骤
- 示例说明
对称加密算法的种类
对称加密算法包括 DES、3DES、AES 等常用算法。其中,AES 目前是最常用的对称加密算法。
Java 中实现对称加密的常用类库
Java 中实现对称加密的常用类库有 JCE(Java Cryptography Extension)、Bouncy Castle 等。
JCE 是 Java SE 的一个扩展库,提供了一套 API 实现了常见的加密、数字签名、MAC、证书验证等安全功能。JCE 库中提供的对称加密算法包括DES、3DES、AES 等。
Bouncy Castle 是 Java 平台上一个广泛使用的加密相关的类库,支持多种加密算法的实现,包括 JCA(Java Cryptography Architecture)中不支持的算法,如 Blowfish、Twofish 等。
对称加密算法的实现步骤
Java 实现对称加密算法的步骤如下:
- 创建一个加密器对象,指定加密算法和工作模式,并初始化加密器对象。
String algorithm = "AES/CBC/PKCS5Padding"; // 指定加密算法和工作模式
Cipher cipher = Cipher.getInstance(algorithm);
- 创建一个密钥对象,指定密钥长度和随机数生成方式,并初始化密钥对象。
int keySize = 128; // 指定密钥长度
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom random = new SecureRandom();
kgen.init(keySize, random); // 初始化密钥生成器
SecretKey secretKey = kgen.generateKey(); // 生成密钥
- 初始化加密器对象,指定加密模式、密钥和随机数生成方式。
cipher.init(Cipher.ENCRYPT_MODE, secretKey, random);
- 对需要加密的数据进行加密,并获取加密结果。
byte[] dataToEncrypt = "Hello World".getBytes();
byte[] encryptedData = cipher.doFinal(dataToEncrypt);
- 创建一个解密器对象,指定加密算法和工作模式,并初始化解密器对象。
Cipher cipher2 = Cipher.getInstance(algorithm);
cipher2.init(Cipher.DECRYPT_MODE, secretKey, random);
- 对加密数据进行解密,获取解密结果。
byte[] decryptedData = cipher2.doFinal(encryptedData);
示例说明
下面是两条示例说明,演示如何使用 Java 实现 AES 对称加密算法。
示例一
import javax.crypto.*;
import java.security.*;
import java.util.Base64;
public class AesDemo {
public static void main(String[] args) throws Exception {
String message = "Hello, World!"; // 需要加密的数据
// 生成密钥
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128); // 指定密钥长度
SecretKey key = keyGen.generateKey();
// 创建加密器
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
// 加密数据
byte[] encrypted = cipher.doFinal(message.getBytes());
// 解密数据
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decrypted = cipher.doFinal(encrypted);
// 输出加密和解密结果
System.out.println("Message: " + message);
System.out.println("Encrypted: " + Base64.getEncoder().encodeToString(encrypted));
System.out.println("Decrypted: " + new String(decrypted));
}
}
输出结果如下所示:
Message: Hello, World!
Encrypted: BRVmzFffRH/1d6o/HHpz6Q==
Decrypted: Hello, World!
示例二
import javax.crypto.*;
import java.security.*;
import java.util.Base64;
public class AesDemo {
public static void main(String[] args) throws Exception {
String message = "Hello, World!"; // 需要加密的数据
// 生成密钥
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128); // 指定密钥长度
SecretKey key = keyGen.generateKey();
// 创建加密器
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
// 加密数据
byte[] encrypted = cipher.doFinal(message.getBytes());
// 解密数据
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decrypted = cipher.doFinal(encrypted);
// 输出加密和解密结果
System.out.println("Message: " + message);
System.out.println("Encrypted: " + Base64.getEncoder().encodeToString(encrypted));
System.out.println("Decrypted: " + new String(decrypted));
}
}
输出结果如下所示:
Message: Hello, World!
Encrypted: kH8pyniPgudk6APrkgvAPQ==
Decrypted: Hello, World!
以上就是 Java 实现对称加密算法的攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 实现对称加密算法 - Python技术站