详解Java利用实现对称加密(DES、3DES、AES)
介绍
对称加密是指加密与解密使用相同的密钥,具有加密速度快、适合加密大文件等优点。常用的对称加密算法有DES、3DES、AES等。
Java SE 提供了对称加密的实现,可以通过 javax.crypto 包中的 Cipher 类完成对称加密和解密操作。在此文中,我们将深入剖析如何使用 Cipher 类实现对称加密。
对称加密的实现流程
对称加密的实现流程主要包括以下几个步骤:
- 创建 Cipher 对象
- 初始化 Cipher 对象
- 进行加密或解密操作
步骤一:创建 Cipher 对象
创建 Cipher 对象的方式如下:
Cipher cipher = Cipher.getInstance("算法/模式/填充");
其中,算法可以是 DES、DESede(3DES)、AES 等对称加密算法,模式可以是 ECB、CBC、PCBC、CFB 或 OFB 等,填充可以是 NoPadding、PKCS5Padding、PKCS7Padding 等。
步骤二:初始化 Cipher 对象
初始化 Cipher 对象的方式如下:
cipher.init(Cipher.ENCRYPT_MODE/DECRYPT_MODE, key);
其中,ENCRYPT_MODE 表示加密模式,DECRYPT_MODE 表示解密模式,key 是一个 SecretKey 对象,用于指定加密或解密时使用的密钥。
步骤三:进行加密或解密操作
Cipher 类的 doFinal() 方法可以用于加密或解密操作,它的使用方式如下:
byte[] result = cipher.doFinal(data);
其中,data 表示待加密或解密的数据,result 表示加密或解密后得到的结果。
示例一:使用DES算法进行加密和解密
以下示例演示如何使用 DES 算法进行加密和解密:
import javax.crypto.*;
import javax.crypto.spec.*;
public class DESDemo {
private static void des_encrypt_decrypt() throws Exception {
// 1. 创建 Cipher 对象
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
// 2. 初始化 Cipher 对象
KeyGenerator generator = KeyGenerator.getInstance("DES");
SecretKey secretKey = generator.generateKey();
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
// 3. 进行加密操作
byte[] data = "hello, world".getBytes();
byte[] encryptedData = cipher.doFinal(data);
System.out.println("Encrypted data: " + new String(encryptedData));
// 4. 初始化 Cipher 对象(解密模式)
cipher.init(Cipher.DECRYPT_MODE, secretKey);
// 5. 进行解密操作
byte[] decryptedData = cipher.doFinal(encryptedData);
System.out.println("Decrypted data: " + new String(decryptedData));
}
public static void main(String[] args) throws Exception {
des_encrypt_decrypt();
}
}
在上述代码中,首先创建了一个 Cipher 对象,使用 DES 算法、ECB 模式、PKCS5Padding 填充方式。然后初始化 Cipher 对象,生成一个 DES 密钥,并指定加密模式,最后使用 doFinal() 方法进行加密操作。接着再次初始化 Cipher 对象,指定解密模式,使用 doFinal() 方法进行解密操作。最终,输出加密和解密后得到的数据。
示例二:使用AES算法进行加密和解密
以下示例演示如何使用 AES 算法进行加密和解密:
import javax.crypto.*;
import javax.crypto.spec.*;
public class AESDemo {
private static void aes_encrypt_decrypt() throws Exception {
// 1. 创建 Cipher 对象
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
// 2. 初始化 Cipher 对象
KeyGenerator generator = KeyGenerator.getInstance("AES");
SecretKey secretKey = generator.generateKey();
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
// 3. 进行加密操作
byte[] data = "hello, world".getBytes();
byte[] encryptedData = cipher.doFinal(data);
System.out.println("Encrypted data: " + new String(encryptedData));
// 4. 初始化 Cipher 对象(解密模式)
cipher.init(Cipher.DECRYPT_MODE, secretKey);
// 5. 进行解密操作
byte[] decryptedData = cipher.doFinal(encryptedData);
System.out.println("Decrypted data: " + new String(decryptedData));
}
public static void main(String[] args) throws Exception {
aes_encrypt_decrypt();
}
}
在上述代码中,首先创建了一个 Cipher 对象,使用 AES 算法、ECB 模式、PKCS5Padding 填充方式。然后初始化 Cipher 对象,生成一个 AES 密钥,并指定加密模式,最后使用 doFinal() 方法进行加密操作。接着再次初始化 Cipher 对象,指定解密模式,使用 doFinal() 方法进行解密操作。最终,输出加密和解密后得到的数据。
结论
通过本文我们了解了对称加密的实现流程,以及如何使用 Cipher 类实现对称加密和解密。针对不同的加密算法和使用场景,可以通过调整算法、模式和填充方式,选择最合适的加密方式进行数据加密保护。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Java利用实现对称加密(DES、3DES、AES) - Python技术站