Java简单加密解密
在计算机科学领域,加密是将原始数据转换为不可读形式的过程,而解密是将加密数据还原为可读形式的过程。加密和解密是信息安全领域的重要概念,它们在保护敏感数据的传输和存储过程中起着至关重要的作用。
本文将介绍如何使用Java进行简单的加密和解密操作,并提供一些代码示例来帮助读者更好地理解。
加密算法
在加密过程中,我们可以使用不同的算法来转换原始数据。Java提供了许多加密算法,包括对称加密和非对称加密算法。
- 对称加密算法使用相同的密钥来加密和解密数据。常见的对称加密算法有:DES、AES等。
- 非对称加密算法使用一对密钥,其中一个用于加密数据,另一个用于解密数据。常见的非对称加密算法有:RSA、DSA等。
在本文中,我们将使用最常见的对称加密算法之一:AES(Advanced Encryption Standard)。
AES加密解密示例
下面是一个使用AES算法进行加密和解密的示例代码:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class AESEncryptionExample {
public static void main(String[] args) throws Exception {
String originalText = "Hello, World!";
String secretKey = "ThisIsASecretKey";
// 生成AES密钥
SecretKey key = generateAESKey(secretKey);
// 加密原始文本
String encryptedText = encrypt(originalText, key);
System.out.println("加密后的文本:" + encryptedText);
// 解密密文
String decryptedText = decrypt(encryptedText, key);
System.out.println("解密后的文本:" + decryptedText);
}
public static SecretKey generateAESKey(String secretKey) throws NoSuchAlgorithmException {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
return new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "AES");
}
public static String encrypt(String text, SecretKey key) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedBytes = cipher.doFinal(text.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(encryptedBytes);
}
public static String decrypt(String encryptedText, SecretKey key) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] encryptedBytes = Base64.getDecoder().decode(encryptedText);
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
return new String(decryptedBytes, StandardCharsets.UTF_8);
}
}
在上面的示例代码中,我们首先指定了使用AES算法进行加密和解密操作。然后,我们使用指定的密钥生成AES密钥。接下来,我们使用生成的密钥将原始文本加密为密文,并将其输出到控制台。最后,我们使用相同的密钥将密文解密为原始文本,并将其输出到控制台。
序列图
下面是一个使用加密和解密操作的序列图示例:
sequenceDiagram
participant User
participant Application
User->>Application: 输入原始文本
User->>Application: 输入密钥
Application->>Application: 生成AES密钥
Application->>Application: 加密原始文本
Application->>Application: 解密密文
Application->>User: 输出解密后的文本
在上面的序列图中,用户输入原始文本和密钥,应用程序生成AES密钥并使用密钥对原始文本进行加密和解密操作,最后输出解密后的文本。
状态图
下面是一个使用加密和解密操作的状态图示例:
stateDiagram
[*] --> 输入原始文本
输入原始文本 --> 输入密钥
输入密钥 --> 生成AES密钥
生成AES密钥 --> 加密原始文本