
如何使用java实现AES加密算法
导言:
在网络应用和数据传输过程中,数据的安全性是至关重要的。加密算法是保护数据安全的重要手段之一。AES(Advanced Encryption Standard)是目前最常用的对称加密算法之一,具有高度的安全性、效率和灵活性。本文将介绍如何使用Java编程语言实现AES加密算法,以保护数据的安全。
导入相关库
在使用Java实现AES加密算法之前,我们需要导入相关的库文件。在Java中,可以使用javax.crypto库来实现AES加密算法。我们需要导入以下库文件:
import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.SecretKeySpec;
实现AES加密和解密方法
立即学习“Java免费学习笔记(深入)”;
public class AESUtil {
private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";
private static final String SECRET_KEY_ALGORITHM = "PBKDF2WithHmacSHA256";
private static final int ITERATION_COUNT = 65536;
private static final int KEY_LENGTH = 128;
private static final int IV_LENGTH = 16;
public static byte[] encrypt(String plaintext, String password) throws Exception {
byte[] salt = generateSalt();
PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray(), salt, ITERATION_COUNT, KEY_LENGTH);
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(SECRET_KEY_ALGORITHM);
SecretKey secretKey = secretKeyFactory.generateSecret(pbeKeySpec);
byte[] iv = generateIV();
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(iv));
byte[] ciphertext = cipher.doFinal(plaintext.getBytes("UTF-8"));
byte[] encrypted = new byte[iv.length + salt.length + ciphertext.length];
System.arraycopy(iv, 0, encrypted, 0, iv.length);
System.arraycopy(salt, 0, encrypted, iv.length, salt.length);
System.arraycopy(ciphertext, 0, encrypted, iv.length + salt.length, ciphertext.length);
return encrypted;
}
public static String decrypt(byte[] encrypted, String password) throws Exception {
byte[] iv = new byte[IV_LENGTH];
System.arraycopy(encrypted, 0, iv, 0, iv.length);
byte[] salt = new byte[encrypted.length - iv.length - KEY_LENGTH / 8];
System.arraycopy(encrypted, iv.length, salt, 0, salt.length);
byte[] ciphertext = new byte[encrypted.length - iv.length - salt.length];
System.arraycopy(encrypted, iv.length + salt.length, ciphertext, 0, ciphertext.length);
PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray(), salt, ITERATION_COUNT, KEY_LENGTH);
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(SECRET_KEY_ALGORITHM);
SecretKey secretKey = secretKeyFactory.generateSecret(pbeKeySpec);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(iv));
byte[] plaintext = cipher.doFinal(ciphertext);
return new String(plaintext, "UTF-8");
}
private static byte[] generateSalt() {
byte[] salt = new byte[KEY_LENGTH / 8];
SecureRandom secureRandom = new SecureRandom();
secureRandom.nextBytes(salt);
return salt;
}
private static byte[] generateIV() {
byte[] iv = new byte[IV_LENGTH];
SecureRandom secureRandom = new SecureRandom();
secureRandom.nextBytes(iv);
return iv;
}
}使用示例
现在我们可以使用上述实现的AES加密算法来加密和解密数据了。
public class Main {
public static void main(String[] args) {
try {
String plaintext = "Hello, World!";
String password = "MySecretPassword";
byte[] encrypted = AESUtil.encrypt(plaintext, password);
System.out.println("Encrypted data: " + Arrays.toString(encrypted));
String decrypted = AESUtil.decrypt(encrypted, password);
System.out.println("Decrypted data: " + decrypted);
} catch (Exception e) {
e.printStackTrace();
}
}
}以上就是如何使用java实现AES加密算法的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号