JAVA实现AES加密算法代码

DES使用越来越少,原因就在于其使用56位密钥,比较容易被破解,近些年来逐渐被AES替代,AES已经变成目前对称加密中最流行算法之一;AES可以使用128、192、和256位密钥,并且用128位分组加密和解密数据。本文就简单介绍如何通过JAVA实现AES加密。

  1. JAVA实现

  闲话少许,掠过AES加密原理及算法,关于这些直接搜索专业网站吧,我们直接看JAVA的具体实现。

  1.1 加密

  代码有详细解释,不多废话。

  /**

  * 加密

  *

  * @param content 需要加密的内容

  * @param password 加密密码

  * @return

  */

  public static byte[] encrypt(String content, String password) {

  try {

  KeyGenerator kgen = KeyGenerator.getInstance(“AES”);

  kgen.init(128, new SecureRandom(password.getBytes()));

  SecretKey secretKey = kgen.generateKey();

  byte[] enCodeFormat = secretKey.getEncoded();

  SecretKeySpec key = new SecretKeySpec(enCodeFormat, “AES”);

  Cipher cipher = Cipher.getInstance(“AES”);// 创建密码器

  byte[] byteContent = content.getBytes(“utf-8”);

  cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化

  byte[] result = cipher.doFinal(byteContent);

  return result; // 加密

  } catch (NoSuchAlgorithmException e) {

  e.printStackTrace();

  } catch (NoSuchPaddingException e) {

  e.printStackTrace();

  } catch (InvalidKeyException e) {

  e.printStackTrace();

  } catch (UnsupportedEncodingException e) {

  e.printStackTrace();

  } catch (IllegalBlockSizeException e) {

  e.printStackTrace();

  } catch (BadPaddingException e) {

  e.printStackTrace();

  }

  return null;

  }

  /**

  * 加密

  *

  * @param content 需要加密的内容

  * @param password 加密密码

  * @return

  */

  public static byte[] encrypt(String content, String password) {

  try {

  KeyGenerator kgen = KeyGenerator.getInstance(“AES”);

  kgen.init(128, new SecureRandom(password.getBytes()));

  SecretKey secretKey = kgen.generateKey();

  byte[] enCodeFormat = secretKey.getEncoded();

  SecretKeySpec key = new SecretKeySpec(enCodeFormat, “AES”);

  Cipher cipher = Cipher.getInstance(“AES”);// 创建密码器

  byte[] byteContent = content.getBytes(“utf-8”);

  cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化

  byte[] result = cipher.doFinal(byteContent);

  return result; // 加密

  } catch (NoSuchAlgorithmException e) {

  e.printStackTrace();

  } catch (NoSuchPaddingException e) {

  e.printStackTrace();

  } catch (InvalidKeyException e) {

  e.printStackTrace();

  } catch (UnsupportedEncodingException e) {

  e.printStackTrace();

  } catch (IllegalBlockSizeException e) {

  e.printStackTrace();

  } catch (BadPaddingException e) {

  e.printStackTrace();

  }

  return null;

  }

  2.2 解密

  代码有详细注释,不多废话

  注意:解密的时候要传入byte数组

  view plaincopy to clipboardprint?

  /**解密

  * @param content 待解密内容

  * @param password 解密密钥

  * @return

  */

  public static byte[] decrypt(byte[] content, String password) {

  try {

  KeyGenerator kgen = KeyGenerator.getInstance(“AES”);

  kgen.init(128, new SecureRandom(password.getBytes()));

  SecretKey secretKey = kgen.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(content);

  return result; // 加密

  } catch (NoSuchAlgorithmException e) {

  e.printStackTrace();

  } catch (NoSuchPaddingException e) {

  e.printStackTrace();

  } catch (InvalidKeyException e) {

  e.printStackTrace();

  } catch (IllegalBlockSizeException e) {

  e.printStackTrace();

  } catch (BadPaddingException e) {

  e.printStackTrace();

  }

  return null;

  }

  /**解密

  * @param content 待解密内容

  * @param password 解密密钥

  * @return

  */

  public static byte[] decrypt(byte[] content, String password) {

  try {

  KeyGenerator kgen = KeyGenerator.getInstance(“AES”);

  kgen.init(128, new SecureRandom(password.getBytes()));

  SecretKey secretKey = kgen.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(content);

  return result; // 加密

  } catch (NoSuchAlgorithmException e) {

  e.printStackTrace();

  } catch (NoSuchPaddingException e) {

  e.printStackTrace();

  } catch (InvalidKeyException e) {

  e.printStackTrace();

  } catch (IllegalBlockSizeException e) {

  e.printStackTrace();

  } catch (BadPaddingException e) {

  e.printStackTrace();

  }

  return null;

  }

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理