使用Java实现数据加密与解密
大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来聊一聊如何使用Java实现数据加密与解密。数据加密在现代应用中至关重要,确保数据在传输和存储过程中不被未授权的第三方访问。下面将通过详细的代码示例展示如何在Java中实现这一功能。
一、引入必要的包
首先,我们需要引入Java加密扩展(JCE)相关的包,这些包包含了加密、解密所需的类和方法。
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
import cn.juwatech.security.EncryptionUtils;
二、生成密钥
在对称加密算法(如AES)中,我们需要一个密钥来加密和解密数据。以下代码展示了如何生成一个AES密钥。
public class KeyGeneratorUtil {
public static SecretKey generateKey(int n) throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(n);
SecretKey secretKey = keyGenerator.generateKey();
return secretKey;
}
public static String encodeKey(SecretKey secretKey) {
return Base64.getEncoder().encodeToString(secretKey.getEncoded());
}
public static SecretKey decodeKey(String encodedKey) {
byte[] decodedKey = Base64.getDecoder().decode(encodedKey);
return new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES");
}
}
三、加密数据
使用生成的密钥对数据进行加密。
public class EncryptionUtil {
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 class DecryptionUtil {
public static String decrypt(String encryptedText, SecretKey secretKey) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
return new String(decryptedBytes);
}
}
五、整合示例
以下代码展示了完整的加密和解密过程。
public class EncryptionExample {
public static void main(String[] args) {
try {
// 生成密钥
SecretKey secretKey = KeyGeneratorUtil.generateKey(256);
String encodedKey = KeyGeneratorUtil.encodeKey(secretKey);
System.out.println("Encoded Key: " + encodedKey);
// 待加密的原文
String plainText = "Hello, JuwaTech!";
System.out.println("Original Text: " + plainText);
// 加密
String encryptedText = EncryptionUtil.encrypt(plainText, secretKey);
System.out.println("Encrypted Text: " + encryptedText);
// 解密
SecretKey decodedKey = KeyGeneratorUtil.decodeKey(encodedKey);
String decryptedText = DecryptionUtil.decrypt(encryptedText, decodedKey);
System.out.println("Decrypted Text: " + decryptedText);
} catch (Exception e) {
e.printStackTrace();
}
}
}
六、使用自定义工具类
我们可以将上述加密和解密过程封装到工具类中,以便在项目中复用。
package cn.juwatech.security;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class EncryptionUtils {
public static SecretKey generateKey(int n) throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(n);
return keyGenerator.generateKey();
}
public static String encodeKey(SecretKey secretKey) {
return Base64.getEncoder().encodeToString(secretKey.getEncoded());
}
public static SecretKey decodeKey(String encodedKey) {
byte[] decodedKey = Base64.getDecoder().decode(encodedKey);
return new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES");
}
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[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
return new String(decryptedBytes);
}
}
七、使用工具类进行加密解密
使用封装好的工具类,可以简化加密和解密过程。
public class EncryptionToolExample {
public static void main(String[] args) {
try {
// 生成密钥
SecretKey secretKey = EncryptionUtils.generateKey(256);
String encodedKey = EncryptionUtils.encodeKey(secretKey);
System.out.println("Encoded Key: " + encodedKey);
// 待加密的原文
String plainText = "Hello, JuwaTech!";
System.out.println("Original Text: " + plainText);
// 加密
String encryptedText = EncryptionUtils.encrypt(plainText, secretKey);
System.out.println("Encrypted Text: " + encryptedText);
// 解密
SecretKey decodedKey = EncryptionUtils.decodeKey(encodedKey);
String decryptedText = EncryptionUtils.decrypt(encryptedText, decodedKey);
System.out.println("Decrypted Text: " + decryptedText);
} catch (Exception e) {
e.printStackTrace();
}
}
}
著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!