Java Cipher類是Java Cryptography Extension (JCE)框架的一部分,用于實現加密和解密操作。Cipher類的主要功能是將明文數據轉換為密文數據(加密)以及將密文數據轉換回明文數據(解密)。
以下是Java Cipher類的工作原理:
算法選擇:首先,你需要選擇一個加密算法,例如AES、DES或RSA。這些算法定義了如何將明文數據轉換為密文數據以及如何將密文數據轉換回明文數據。
模式選擇:接下來,你需要選擇一個加密模式,例如ECB、CBC或GCM。這些模式定義了如何將明文數據分割成塊并進行加密或解密操作。
填充選擇:對于某些加密算法和模式,你可能還需要選擇一個填充方案,例如PKCS5Padding或NoPadding。填充方案定義了如何處理不完整的數據塊,以便在加密過程中正確地處理它們。
初始化:使用所選的算法、模式和填充方案初始化Cipher對象。在此過程中,你還需要提供一個密鑰,該密鑰用于加密和解密操作。
加密和解密:使用初始化后的Cipher對象,你可以調用doFinal()方法來執行加密或解密操作。對于加密操作,你需要提供明文數據作為輸入,而對于解密操作,你需要提供密文數據作為輸入。doFinal()方法將返回加密或解密后的數據。
以下是一個簡單的示例,展示了如何使用Java Cipher類進行AES加密和解密操作:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class CipherExample {
public static void main(String[] args) throws Exception {
// 生成AES密鑰
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey secretKey = keyGenerator.generateKey();
// 加密
Cipher encryptCipher = Cipher.getInstance("AES");
encryptCipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] plainTextBytes = "Hello, World!".getBytes();
byte[] encryptedBytes = encryptCipher.doFinal(plainTextBytes);
String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes);
System.out.println("Encrypted text: " + encryptedText);
// 解密
Cipher decryptCipher = Cipher.getInstance("AES");
decryptCipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedBytes = decryptCipher.doFinal(Base64.getDecoder().decode(encryptedText));
String decryptedText = new String(decryptedBytes);
System.out.println("Decrypted text: " + decryptedText);
}
}
這個示例首先生成一個AES密鑰,然后使用該密鑰對明文數據進行加密,并將加密后的數據轉換為Base64編碼的字符串。接下來,它使用相同的密鑰對加密后的數據進行解密,并將解密后的數據轉換回原始明文。