java aes key iv_JAVA_AES_的加解密
时间: 2023-08-04 13:06:21 浏览: 155
您好,针对您的问题,我可以简单地给出以下代码示例,展示如何使用 Java 的 AES 加解密算法。
首先,我们需要引入以下包:
```java
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
```
然后,我们需要定义一个加解密的通用函数:
```java
public static String encrypt(String data, String key, String iv) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
int blockSize = cipher.getBlockSize();
byte[] dataBytes = data.getBytes();
int plaintextLength = dataBytes.length;
if (plaintextLength % blockSize != 0) {
plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));
}
byte[] plaintext = new byte[plaintextLength];
System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);
SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
byte[] encrypted = cipher.doFinal(plaintext);
return new String(Base64.getEncoder().encode(encrypted));
}
public static String decrypt(String data, String key, String iv) throws Exception {
byte[] encrypted = Base64.getDecoder().decode(data.getBytes());
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);
byte[] decrypted = cipher.doFinal(encrypted);
return new String(decrypted).trim();
}
```
在上述函数中,我们使用了 AES 加解密算法,采用了 CBC 模式和 NoPadding 填充方式。同时,我们需要传入三个参数:
- data:待加解密的数据
- key:AES 密钥
- iv:AES 偏移量
最后,我们可以调用上述函数进行加解密操作:
```java
String key = "0123456789abcdef";
String iv = "fedcba9876543210";
String data = "Hello, world!";
String encrypted = encrypt(data, key, iv);
String decrypted = decrypt(encrypted, key, iv);
System.out.println("Encrypted: " + encrypted);
System.out.println("Decrypted: " + decrypted);
```
以上代码展示了如何使用 Java 的 AES 加解密算法进行加解密操作。需要注意的是,为了确保加解密的正确性,我们需要在加密和解密时使用相同的密钥和偏移量。同时,由于使用了 NoPadding 填充方式,因此我们需要手动对待加密的数据进行填充。
阅读全文