Java 对数据加密 固定长度
介绍
数据加密是保护敏感数据的一种重要手段。在现代计算机应用中,我们经常需要将敏感数据加密后存储或传输,以防止未经授权的访问。Java 作为一种广泛应用的编程语言,提供了多种加密算法和工具,可以对数据进行加密操作。本文将介绍如何使用 Java 对数据进行加密,并探讨如何固定加密后数据的长度。
加密算法
Java 提供了许多常见的加密算法,如DES、AES、RSA等。这些算法都具有不同的特点和适用场景。在选择加密算法时,我们需要考虑安全性和性能等因素。
以AES算法为例,我们可以使用Java的javax.crypto
包来进行加密操作。下面是一个使用AES算法加密和解密数据的示例:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.util.Base64;
public class AESUtil {
// 生成随机密钥
public static byte[] generateKey() throws Exception {
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
SecureRandom random = new SecureRandom();
keyGen.init(random);
SecretKey secretKey = keyGen.generateKey();
return secretKey.getEncoded();
}
// 加密数据
public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
return cipher.doFinal(data);
}
// 解密数据
public static byte[] decrypt(byte[] encryptedData, byte[] key) throws Exception {
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
return cipher.doFinal(encryptedData);
}
public static void main(String[] args) throws Exception {
String data = "Hello, World!";
byte[] key = generateKey();
byte[] encryptedData = encrypt(data.getBytes(), key);
byte[] decryptedData = decrypt(encryptedData, key);
System.out.println("加密前的数据:" + data);
System.out.println("加密后的数据:" + Base64.getEncoder().encodeToString(encryptedData));
System.out.println("解密后的数据:" + new String(decryptedData));
}
}
以上代码生成一个随机的AES密钥,然后使用该密钥对数据进行加密和解密。加密后的数据以Base64编码的形式进行存储和传输。
固定长度加密数据
在某些场景下,我们需要将加密后的数据固定成固定长度的格式,以便于存储和处理。一种常见的做法是使用填充算法,将加密数据填充到指定长度。
下面是一个使用PKCS5Padding填充算法将加密数据固定为指定长度的示例:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.util.Base64;
public class FixedLengthEncryptionUtil {
// 生成随机密钥
public static byte[] generateKey() throws Exception {
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
SecureRandom random = new SecureRandom();
keyGen.init(random);
SecretKey secretKey = keyGen.generateKey();
return secretKey.getEncoded();
}
// 加密数据
public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
return cipher.doFinal(data);
}
// 解密数据
public static byte[] decrypt(byte[] encryptedData, byte[] key) throws Exception {
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
return cipher.doFinal(encryptedData);
}
public static void main(String[] args) throws Exception {
String data = "Hello, World!";
byte[] key = generateKey();
byte[] encryptedData = encrypt(data.getBytes(), key);
byte[] decryptedData = decrypt(