Java 中的對稱加密
簡介
對稱加密,也稱為金鑰加密,是一種使用相同金鑰進行加密和解密的加密型別。這種加密方法快速有效,使其適用於加密大量資料。最常用的對稱加密演算法是高階加密標準 (AES)。
Java 透過 javax.crypto 包為對稱加密提供了強大的支援,該包包含 SecretKey、Cipher 和 KeyGenerator 等類。
Java 中的對稱加密
Java 中 javax.crypto 包中的 Cipher 類提供了用於加密和解密的加密密碼的功能。它是 Java 加密擴充套件 (JCE) 框架的核心。
在 Java 中,Cipher 類提供對稱加密的功能,而 KeyGenerator 類用於生成對稱加密的金鑰。
示例
讓我們看看在 Java 中使用 AES 進行對稱加密的簡單實現:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Main {
public static void main(String[] args) throws Exception {
// Generate key
SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();
// Original message
String originalMessage = "Hello, world!";
// Create Cipher instance and initialize it to ENCRYPT_MODE
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
// Encrypt the message
byte[] encryptedMessage = cipher.doFinal(originalMessage.getBytes(StandardCharsets.UTF_8));
// Convert the encrypted message to Base64 encoded string
String encodedMessage = Base64.getEncoder().encodeToString(encryptedMessage);
System.out.println("Original Message: " + originalMessage);
System.out.println("Encrypted Message: " + encodedMessage);
// Reinitialize the cipher to DECRYPT_MODE
cipher.init(Cipher.DECRYPT_MODE, secretKey);
// Decrypt the message
byte[] decryptedMessage = cipher.doFinal(Base64.getDecoder().decode(encodedMessage));
System.out.println("Decrypted Message: " + new String(decryptedMessage, StandardCharsets.UTF_8));
}
}
輸出
執行程式時,您將看到類似於以下內容的輸出:
Original Message: Hello, world! Encrypted Message: iWohhm/c89uBVaJ3j4YFkA== Decrypted Message: Hello, world!
解釋
在上面的程式碼中,我們首先使用 KeyGenerator 類為 AES 加密生成金鑰。
然後,我們為 AES 建立 Cipher 類的例項,並使用金鑰將其初始化為 ENCRYPT_MODE。
接下來,我們定義原始訊息“Hello, world!”,並使用 Cipher 的 doFinal 方法對其進行加密。我們還將加密的訊息位元組轉換為 Base64 編碼的字串,以便於處理。
然後,我們將原始訊息和加密訊息列印到控制檯。
為了演示解密,我們使用相同的金鑰將 Cipher 重新初始化為 DECRYPT_MODE 並解密加密的訊息。最後,我們將解密的訊息列印到控制檯。
由於每次生成唯一的金鑰,因此每次執行程式時,加密的訊息都會有所不同。
這裡需要注意的重要一點是,解密的訊息與原始訊息相同,這表明我們的加密和解密過程正在正常工作。
要點
對稱加密是維護機密性的強大工具,但請記住,資料的安全性取決於金鑰的安全性。如果未經授權的人員訪問了金鑰,他們就可以解密資料。因此,務必確保金鑰的安全。
結論
由於 javax.crypto 包的存在,在 Java 中實現對稱加密是一個簡單的過程。瞭解如何使用 Cipher 和 KeyGenerator 類來加密和解密資料可以顯著提高 Java 應用程式的安全性。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP