全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

java基于AES对称加密算法实现的加密与解密功能示例

本文实例讲述了java基于AES对称加密算法实现的加密与解密功能。分享给大家供大家参考,具体如下:

package com.soufun.com;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Date;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
/**
 * @author WHD
 */
public class AesUtil {
  private static final String AES="AES";
  private static final String UTF8="UTF-8";
  static KeyGenerator kgen =null;
  static{
    try {
      kgen= KeyGenerator.getInstance(AES);
    } catch (NoSuchAlgorithmException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
  /*
   * @param content:
   * @param password:
   */
  private static byte[] encrypt(String content, String password) {
    try {
      // 使用静态代码块来生成KeyGenerator对象
      //KeyGenerator kgen = KeyGenerator.getInstance(AES);
      // 使用128 位
      kgen.init(128, new SecureRandom(password.getBytes()));
      SecretKey secretKey = kgen.generateKey();
      byte[] encodeFormat = secretKey.getEncoded();
      SecretKeySpec key = new SecretKeySpec(encodeFormat, AES);
      // Cipher对象实际完成加密操作
      Cipher cipher = Cipher.getInstance(AES);
      // 加密内容进行编码
      byte[] byteContent = content.getBytes(UTF8);
      // 用密匙初始化Cipher对象
      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:
   */
  private static byte[] decrypt(byte[] content, String password) {
    try {// 使用静态代码块来生成KeyGenerator对象
      //KeyGenerator kgen = KeyGenerator.getInstance(AES);
      // 使用128 位
      kgen.init(128, new SecureRandom(password.getBytes()));
      SecretKey secretKey = kgen.generateKey();
      byte[] encodeFormat = secretKey.getEncoded();
      SecretKeySpec key = new SecretKeySpec(encodeFormat, AES);
      // Cipher对象实际完成加密操作
      Cipher cipher = Cipher.getInstance(AES);
      // 用密匙初始化Cipher对象
      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 buf
   * @return
   */
  private static String parseByte2HexStr(byte buf[]) {
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < buf.length; i++) {
      String hex = Integer.toHexString(buf[i] & 0xFF);
      if (hex.length() == 1) {
        hex = '0' + hex;
      }
      sb.append(hex.toUpperCase());
    }
    return sb.toString();
  }
  /**
   * 十六进制--》二进制转化
   * @param hexStr
   * @return
   */
  private static byte[] parseHexStr2Byte(String hexStr) {
    if (hexStr.length() < 1) {
      return null;
    }
    byte[] result = new byte[hexStr.length() / 2];
    for (int i = 0; i < hexStr.length() / 2; i++) {
      int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
      int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2),
          16);
      result[i] = (byte) (high * 16 + low);
    }
    return result;
  }
  public static void main(String[] args) throws UnsupportedEncodingException {
    long begin=new Date().getTime();
    String content = "aaades加密测试";
    String password = "12345678dd";
    // 加密
    System.out.println("加密前:" + content);
    byte[] encryptResult = encrypt(content, password);
    String encryptResultStr = parseByte2HexStr(encryptResult);
    System.out.println("加密后:" + encryptResultStr);
    // 解密
    byte[] decryptFrom = parseHexStr2Byte(encryptResultStr);
    byte[] decryptResult = decrypt(decryptFrom, password);
    // 解密内容进行解码
    String result = new String(decryptResult, UTF8);
    System.out.println("解密后:" + result);
    long end= new Date().getTime();
    System.out.println(end-begin);
  }
}

注:SecureRandom是生成安全随机数序列,password.getBytes()是种子,只要种子相同,序列就一样,所以解密只要有password就行,可以复原这个序列。

PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:

密码安全性在线检测:
http://tools./password/my_password_safe

高强度密码生成器:
http://tools./password/CreateStrongPassword

迅雷、快车、旋风URL加密/解密工具:
http://tools./password/urlrethunder

在线散列/哈希算法加密工具:
http://tools./password/hash_encrypt

在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools./password/hash_md5_sha

在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools./password/sha_encode

希望本文所述对大家java程序设计有所帮助。


# java  # AES  # 对称  # 加密算法  # 加密  # 解密  # Java AES256加密解密示例代码  # java使用RSA与AES加密解密的实例代码详解  # Java使用Hutool实现AES、DES加密解密的方法  # Java使用AES加密和解密的实例详解  # Java AES加密解密的简单实现方法  # Java与Node.js利用AES加密解密出相同结果的方法示例  # Java实现的AES256加密解密功能示例  # java使用Hex编码解码实现Aes加密解密功能示例  # Android、iOS和Java通用的AES128加密解密示例代码  # JAVA中AES对称加密和解密过程  # Java AES加密和解密教程  # 加密工具  # 随机数  # 还可以  # 感兴趣  # 就行  # 给大家  # 所述  # 程序设计  # 高强度  # 加密解密  # 只要有  # 讲述了  # generated  # block  # TODO  # Auto  # content  # password  # printStackTrace  # param 


相关文章: 如何用低价快速搭建高质量网站?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  如何用虚拟主机快速搭建网站?详细步骤解析  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  如何通过智能用户系统一键生成高效建站方案?  如何在阿里云部署织梦网站?  微信小程序 input输入框控件详解及实例(多种示例)  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  如何快速生成凡客建站的专业级图册?  如何选择美橙互联多站合一建站方案?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  外贸公司网站制作哪家好,maersk船公司官网?  建站之星3.0如何解决常见操作问题?  如何通过VPS搭建网站快速盈利?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  学校为何禁止电信移动建设网站?  Android自定义listview布局实现上拉加载下拉刷新功能  网站插件制作软件免费下载,网页视频怎么下到本地插件?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  如何快速搭建高效可靠的建站解决方案?  建站之家VIP精选网站模板与SEO优化教程整合指南  广州营销型建站服务商推荐:技术优势与SEO优化解析  如何在建站宝盒中设置产品搜索功能?  南京网站制作费用,南京远驱官方网站?  如何在景安服务器上快速搭建个人网站?  如何快速登录WAP自助建站平台?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  攀枝花网站建设,攀枝花营业执照网上怎么年审?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  如何选择高效可靠的多用户建站源码资源?  建站168自助建站系统:快速模板定制与SEO优化指南  如何通过.red域名打造高辨识度品牌网站?  建站之星安装步骤有哪些常见问题?  高防服务器如何保障网站安全无虞?  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  山东云建站价格为何差异显著?  孙琪峥织梦建站教程如何优化数据库安全?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  如何做网站制作流程,*游戏网站怎么搭建?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  建站之星价格显示格式升级,你的预算足够吗?  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  黑客入侵网站服务器的常见手法有哪些?  网站制作免费,什么网站能看正片电影?  个人摄影网站制作流程,摄影爱好者都去什么网站?  nginx修改上传文件大小限制的方法  宁波自助建站系统如何快速打造专业企业网站?  如何用景安虚拟主机手机版绑定域名建站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。