可逆加密算法 Java
1. 引言
在信息安全领域中,加密算法起着至关重要的作用。它们可以保护敏感信息的安全性,防止被未授权的人访问、修改或泄露。可逆加密算法在加密和解密过程中使用相同的密钥,可以将明文转换为密文,并且还可以将密文恢复为原始的明文。本文将介绍可逆加密算法的原理,并使用 Java 编程语言提供一些代码示例。
2. 可逆加密算法原理
可逆加密算法的原理是使用一个密钥对明文进行加密转换,然后使用同一个密钥对密文进行解密转换,以恢复原始的明文。常见的可逆加密算法有对称加密算法和非对称加密算法。
2.1 对称加密算法
对称加密算法使用相同的密钥对明文和密文进行加密和解密。示例代码如下:
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public class SymmetricEncryption {
public static void main(String[] args) throws Exception {
String key = "ThisIsASecretKey";
String plaintext = "Hello World!";
// 创建加密器
Cipher cipher = Cipher.getInstance("AES");
// 创建密钥
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES");
// 加密
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes());
// 解密
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
String decryptedText = new String(decryptedBytes);
System.out.println("Original Text: " + plaintext);
System.out.println("Encrypted Text: " + new String(encryptedBytes));
System.out.println("Decrypted Text: " + decryptedText);
}
}
在上面的代码中,我们使用了对称加密算法 AES。首先,我们创建了一个加密器 Cipher
对象,并指定使用 AES 算法。然后,我们创建了一个密钥 SecretKeySpec
对象,并使用密钥字节数组和 AES 算法来初始化它。接下来,我们使用 cipher.init()
方法将加密器初始化为加密模式或解密模式,并传入密钥。然后,我们使用 cipher.doFinal()
方法对明文进行加密或解密操作。最后,我们将得到的密文进行输出,然后再将密文进行解密操作,得到原始的明文。
2.2 非对称加密算法
非对称加密算法使用一对密钥,即公钥和私钥。公钥用于加密,私钥用于解密。示例代码如下:
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import javax.crypto.Cipher;
public class AsymmetricEncryption {
public static void main(String[] args) throws Exception {
String plaintext = "Hello World!";
// 生成密钥对
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// 获取公钥和私钥
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
// 创建加密器
Cipher cipher = Cipher.getInstance("RSA");
// 加密
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes());
// 解密
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
String decryptedText = new String(decryptedBytes);
System.out.println("Original Text: " + plaintext);
System.out.println("Encrypted Text: " + new String(encryptedBytes));
System.out.println("Decrypted Text: " + decryptedText);
}
}
在上面的代码中,我们使用了非对称加密算法 RSA。首先,我们使用 KeyPairGenerator
生成了一个密钥对,并指定使用 RSA 算法和密钥长度为 2048。然后,我们使用 keyPair.getPublic()
和 keyPair.getPrivate()
方法获取公钥