21xrx.com
2025-03-20 05:46:59 Thursday
文章检索 我的文章 写文章
Java如何实现AES加解密?
2023-06-14 23:26:10 深夜i     --     --
Java AES加解密 JCE库 密钥 加密 解密

Java作为一种广泛使用的编程语言,提供了许多实用和安全的功能。其中,AES(Advanced Encryption Standard)加密算法是一种被广泛使用的加密方式。在Java中,我们可以使用JCE(Java Cryptography Extension)库来实现AES加解密。

首先,我们需要引入JCE库并选择AES算法。代码如下:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class AESUtil {
  private static final String ALGORITHM = "AES";
  private static final int KEY_SIZE = 128;
  /**
   * 生成AES密钥
   */
  public static byte[] generateKey() throws Exception {
    KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);
    keyGenerator.init(KEY_SIZE);
    SecretKey secretKey = keyGenerator.generateKey();
    return secretKey.getEncoded();
  }
  /**
   * 加密数据
   */
  public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
    SecretKeySpec keySpec = new SecretKeySpec(key, ALGORITHM);
    Cipher cipher = Cipher.getInstance(ALGORITHM);
    cipher.init(Cipher.ENCRYPT_MODE, keySpec);
    return cipher.doFinal(data);
  }
  /**
   * 解密数据
   */
  public static byte[] decrypt(byte[] data, byte[] key) throws Exception {
    SecretKeySpec keySpec = new SecretKeySpec(key, ALGORITHM);
    Cipher cipher = Cipher.getInstance(ALGORITHM);
    cipher.init(Cipher.DECRYPT_MODE, keySpec);
    return cipher.doFinal(data);
  }
}

生成AES密钥的方法`generateKey()`会返回一个byte数组,其中包含128位的密钥。加密方法`encrypt()`将原始数据和密钥作为输入,输出加密后的数据,解密方法`decrypt()`将加密后的数据和密钥作为输入,输出原始数据。

使用上述代码,我们就可以在Java中实现AES加解密了。具体实现可以参考以下示例:

public class AESExample {
  public static void main(String[] args) throws Exception {
    String data = "Hello, world!";
    byte[] key = AESUtil.generateKey();
    byte[] encryptedData = AESUtil.encrypt(data.getBytes(), key);
    byte[] decryptedData = AESUtil.decrypt(encryptedData, key);
    String originalData = new String(decryptedData);
    System.out.println("Original data: " + originalData);
  }
}

以上示例中,我们使用AESUtil生成一个随机密钥,然后将数据加密并解密,最终输出解密后的数据。

  
  

评论区