JAVA实现AES代码
时间: 2023-10-26 22:27:24 浏览: 82
java处理常规加密解密
AES(Advanced Encryption Standard)是一种对称加密算法,它的密钥长度可以是 128、192 或 256 位。下面是 JAVA 实现 AES 加密和解密的代码:
```java
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;
public class AES {
public static void main(String[] args) throws Exception {
String plainText = "Hello, world!";
String password = "1234567890abcdef";
String cipherText = encrypt(plainText, password);
System.out.println(cipherText);
String decryptedText = decrypt(cipherText, password);
System.out.println(decryptedText);
}
public static String encrypt(String plainText, String password) throws Exception {
byte[] keyBytes = password.getBytes();
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(keyBytes);
keyGenerator.init(128, secureRandom);
SecretKey secretKey = keyGenerator.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
byte[] byteContent = plainText.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(byteContent);
return Base64.getEncoder().encodeToString(result);
}
public static String decrypt(String cipherText, String password) throws Exception {
byte[] keyBytes = password.getBytes();
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(keyBytes);
keyGenerator.init(128, secureRandom);
SecretKey secretKey = keyGenerator.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(Base64.getDecoder().decode(cipherText));
return new String(result, "utf-8");
}
}
```
上述代码中,`encrypt()` 方法实现了 AES 加密,`decrypt()` 方法实现了 AES 解密。其中,加密过程主要分为以下几个步骤:
1. 将密码转换为字节数组,并使用 `KeyGenerator` 生成密钥。
2. 获取密钥的字节数组,并根据该数组创建一个 `SecretKeySpec` 对象。
3. 创建 `Cipher` 对象,并使用 `SecretKeySpec` 对象初始化密码器。
4. 将明文转换为字节数组,并调用 `doFinal()` 方法进行加密。
5. 将加密后的字节数组进行 Base64 编码,返回密文字符串。
解密过程与加密过程类似,只不过需要将加密模式改为解密模式,同时需要将密文进行 Base64 解码。
阅读全文