21xrx.com
2024-12-22 20:59:12 Sunday
登录
文章检索 我的文章 写文章
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生成一个随机密钥,然后将数据加密并解密,最终输出解密后的数据。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复