Java字符串加密解密
在实际开发中,经常会遇到需要对字符串进行加密和解密的需求,比如存储敏感信息、传输数据等。本文将介绍如何使用Java语言对字符串进行加密和解密,并提供代码示例。
加密算法简介
在进行字符串加密和解密之前,首先需要了解一些常用的加密算法。下面是几种常见的加密算法:
- 对称加密算法:使用相同的密钥进行加密和解密,常见的有DES、AES等。
- 非对称加密算法:使用一对密钥,公钥用于加密,私钥用于解密,常见的有RSA、DSA等。
- 散列算法:将任意长度的数据转换为固定长度的数据,常见的有MD5、SHA-1等。
在实际应用中,常常使用对称加密算法对数据进行加密,然后使用非对称加密算法对对称密钥进行加密,以保证数据的安全性。
字符串加密实现
在Java中,可以使用javax.crypto包提供的类来进行加密和解密操作。接下来,我们将使用AES对称加密算法对字符串进行加密和解密。
首先,我们需要生成一个密钥。可以使用KeyGenerator类来生成一个随机的AES密钥,示例代码如下:
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
public class AESKeyGenerator {
public static SecretKey generateKey() throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128); // 设置密钥长度为128位
return keyGenerator.generateKey();
}
public static void main(String[] args) throws Exception {
SecretKey secretKey = generateKey();
System.out.println("生成的密钥:" + secretKey);
}
}
以上代码生成了一个128位的AES密钥。
接下来,我们可以使用Cipher类进行加密和解密操作。示例代码如下:
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AESEncryptDecrypt {
public static String encrypt(String plainText, SecretKey secretKey) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
return Base64.getEncoder().encodeToString(encryptedBytes);
}
public static String decrypt(String encryptedText, SecretKey secretKey) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] encryptedBytes = Base64.getDecoder().decode(encryptedText);
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
return new String(decryptedBytes);
}
public static void main(String[] args) throws Exception {
String plainText = "Hello, World!";
SecretKey secretKey = AESKeyGenerator.generateKey();
String encryptedText = encrypt(plainText, secretKey);
System.out.println("加密后的字符串:" + encryptedText);
String decryptedText = decrypt(encryptedText, secretKey);
System.out.println("解密后的字符串:" + decryptedText);
}
}
以上代码使用AES密钥对字符串进行加密和解密操作,并输出结果。
类图
classDiagram
class AESKeyGenerator{
<<final>>
-generateKey(): SecretKey
+main(String[]): void
}
class AESEncryptDecrypt{
<<final>>
-encrypt(String, SecretKey): String
-decrypt(String, SecretKey): String
+main(String[]): void
}
class SecretKey{
<<final>>
}
AESKeyGenerator --> SecretKey
AESEncryptDecrypt --> SecretKey
上述类图展示了AESKeyGenerator和AESEncryptDecrypt两个类之间的关系,其中AESKeyGenerator生成并返回SecretKey,AESEncryptDecrypt使用SecretKey进行加密和解密操作。
总结
本文介绍了Java中如何对字符串进行加密和解密操作。首先,我们了解了一些常用的加密算法,然后使用AES对称加密算法对字符串进行加密和解密。最后,给出了代码示例,并通过类图展示了相关类的关系。在实际应用中,可以根据需求选择合适的加密算法,并结合Java提供的加密API进行实现。
希