设为首页 加入收藏

TOP

JAVA实现AES加密
2014-10-26 18:30:04 来源: 作者: 【 】 浏览:91
Tags:JAVA 实现 AES 加密

  1. 因子


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


  2. JAVA实现


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


  2.1 加密


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


  view plaincopy to clipboardprint


  /**


  * 加密


  *


  * @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;


  }


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java中date与Jsp中date交互 下一篇Java反射访问私有变量和私有方法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: