Java对称加解密算法AES

  1. import org.apache.commons.codec.binary.Base64;
  2. import org.apache.commons.lang3.StringUtils;
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5.  
  6. import javax.crypto.Cipher;
  7. import javax.crypto.spec.SecretKeySpec;
  8.  
  9. /**
  10. * 敏感加密入参出参字段工具类
  11. */
  12. public class AesEncryptUtils {
  13.  
  14. private static Logger logger = LoggerFactory.getLogger(AesEncryptUtils.class);
  15. private static final String AES_ALG = "AES";
  16. /**
  17. * AES算法
  18. */
  19. private static final String AES_CBC_PCK_ALG = "AES/ECB/PKCS5Padding";
  20.  
  21. public static final String CHARSET_UTF8 = "UTF-8";
  22.  
  23. /**
  24. * AES加密
  25. *
  26. * @param srcContent
  27. * @return
  28. * @throws Exception
  29. */
  30. public static String aesEncryptContent(String srcContent,String AES_KEY) {
  31. try{
  32. //如果为空不加密
  33. if(StringUtils.isEmpty(srcContent)){
  34. return srcContent;
  35. }
  36. String aesStr = aesEncrypt(srcContent,AES_KEY,CHARSET_UTF8);
  37. return aesStr;
  38. }catch (Exception e){
  39. logger.error("AES加密失败,srcContent为{}",srcContent);
  40. throw new RuntimeException("AES加密失败");
  41. }
  42. }
  43.  
  44. /**
  45. * AES解密
  46. *
  47. * @param aesContent
  48. * @return
  49. * @throws Exception
  50. */
  51. public static String aesDecryptContent(String aesContent,String AES_KEY){
  52. String srcStr = "";
  53. try{
  54. //如果为空不加密
  55. if(StringUtils.isEmpty(aesContent)){
  56. return aesContent;
  57. }
  58. srcStr = aesDecrypt(aesContent,AES_KEY,CHARSET_UTF8);
  59. }catch (Exception e){
  60. logger.error("AES解密失败,aesContent为{}",aesContent);
  61. }
  62. return srcStr;
  63. }
  64.  
  65. /**
  66. * AES加密
  67. *
  68. * @param content
  69. * @param aesKey
  70. * @param charset
  71. * @return
  72. */
  73. private static String aesEncrypt(String content, String aesKey, String charset)
  74. throws Exception {
  75. Cipher cipher = Cipher.getInstance(AES_CBC_PCK_ALG);
  76. cipher.init(Cipher.ENCRYPT_MODE,
  77. new SecretKeySpec(aesKey.getBytes(), AES_ALG));
  78.  
  79. byte[] encryptBytes = cipher.doFinal(content.getBytes(charset));
  80. return new String(Base64.encodeBase64(encryptBytes));
  81. }
  82.  
  83. /**
  84. * AES解密
  85. *
  86. * @param content
  87. * @param key
  88. * @param charset
  89. * @return
  90. */
  91. private static String aesDecrypt(String content, String key, String charset)
  92. throws Exception {
  93. Cipher cipher = Cipher.getInstance(AES_CBC_PCK_ALG);
  94. cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes(),
  95. AES_ALG));
  96. byte[] cleanBytes = cipher.doFinal(Base64.decodeBase64(content.getBytes()));
  97. return new String(cleanBytes, charset);
  98. }
  99.  
  100. /**
  101. * 手机号加密后字符串为str:OgB897+iuJYjuw4H1Ou3xw==
  102. * 手机号解密后字符串为str2:19966667777
  103. * 姓名加密后字符串为str:rfGUZPPHuG91j/cEjJJbOA==
  104. * 姓名解密后字符串为str2:张三
  105. * 身份证号加密后字符串为str:UCK1di7NzzjjjNAGZMg2iS/c6jnEv0fips1zo7ww4RQ=
  106. * 身份证号解密后字符串为str2:463300122545556699
  107. * @param args
  108. * @throws Exception
  109. */
  110. public static void main(String[] args) throws Exception{
  111. try {
  112. //注意:密钥需要32位
  113. String key = "testkey111testkey111testkey11132";
  114. String str = aesEncryptContent("19966667777", key);
  115. System.out.println("手机号加密后字符串为str:"+str);
  116. String str2 = aesDecryptContent(str, key);
  117. System.out.println("手机号解密后字符串为str2:"+str2);
  118.  
  119. str = aesEncryptContent("张三", key);
  120. System.out.println("姓名加密后字符串为str:"+str);
  121. str2 = aesDecryptContent(str, key);
  122. System.out.println("姓名解密后字符串为str2:"+str2);
  123.  
  124. str = aesEncryptContent("463300122545556699", key);
  125. System.out.println("身份证号加密后字符串为str:"+str);
  126. str2 = aesDecryptContent(str, key);
  127. System.out.println("身份证号解密后字符串为str2:"+str2);
  128.  
  129. } catch (Exception e) {
  130. e.printStackTrace();
  131. }
  132. }
  133.  
  134. }

Java对称加解密算法AES的更多相关文章

  1. AES加解密算法Qt实现

    [声明] (1) 本文源码 在一位未署名网友源码基础上,利用Qt编程,实现了AES加解密算法,并添加了文件加解密功能.在此表示感谢!该源码仅供学习交流,请勿用于商业目的. (2) 图片及描述 除图1外 ...

  2. Asp.Net Core 2.0 项目实战(7)MD5加密、AES&DES对称加解密

    本文目录 1. 摘要 2. MD5加密封装 3. AES的加密.解密 4. DES加密/解密 5. 总结 1.  摘要 C#中常用的一些加密和解密方案,如:md5加密.RSA加密与解密和DES加密等, ...

  3. AES加解密算法在Android中的应用及Android4.2以上版本调用问题

     from://http://blog.csdn.net/xinzheng_wang/article/details/9159969 AES加解密算法在Android中的应用及Android4.2以上 ...

  4. 常见的加密和解密算法—AES

    一.AES加密概述 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用 ...

  5. C#加解密算法

    先附上源码 加密解密算法目前已经应用到我们生活中的各个方面 加密用于达到以下目的: 保密性:帮助保护用户的标识或数据不被读取. 数据完整性:帮助保护数据不被更改. 身份验证:确保数据发自特定的一方. ...

  6. DES加解密算法Qt实现

      算法解密qt加密table64bit [声明] (1) 本文源码 大部分源码来自:DES算法代码.在此基础上,利用Qt编程进行了改写,实现了DES加解密算法,并添加了文件加解密功能.在此对署名为b ...

  7. [转]RSA,DSA等加解密算法介绍

    From : http://blog.sina.com.cn/s/blog_a9303fd90101cgw4.html 1)      MD5/SHA MessageDigest是一个数据的数字指纹. ...

  8. php des 对称加解密类

    <?php header("Content-Type: text/html;charset=utf-8"); /** * des 对称加解密 */ class des { p ...

  9. 3des加解密算法

    编号:1003时间:2016年4月1日09:51:11功能:openssl_3des加解密算法http://blog.csdn.net/alonesword/article/details/17385 ...

  10. QQ协议的TEA加解密算法

    QQ通讯协议里的加解密算法. #include <stdio.h> #include <stdlib.h> #include <memory.h> #include ...

随机推荐

  1. Flagger on ASM·基于Mixerless Telemetry实现渐进式灰度发布系列 1 遥测数据

    简介: 服务网格ASM的Mixerless Telemetry技术,为业务容器提供了无侵入式的遥测数据.遥测数据一方面作为监控指标被ARMPS/prometheus采集,用于服务网格可观测性:另一方面 ...

  2. 参与 Apache 顶级开源项目的 N 种方式,Apache Dubbo Samples SIG 成立!

    简介: 一说到参与开源项目贡献,一般大家的反应都是代码级别的贡献,总觉得我的代码被社区合并了,我才算一个贡献者,这是一个常见的错误认知.其实,在一个开源社区中有非常多的角色是 non-code con ...

  3. 网不好怎么办?TLS握手带宽直降80%,BabaSSL是怎么做到的?| 龙蜥技术

    ​简介:为了保障数据的安全性,客户端会先和服务器进行 TLS 握手,有什么办法可以减少 TLS 握手的带宽消耗呢? 编者按:BabaSSL 是一款开源的密码库产品,在 GitHub 和龙蜥社区开源,并 ...

  4. STM32 ADC使用问题

    基本信息 MCU:STM32F105R8T6 库:HAL 平台:MDK 精度:12位 问题一 现象: 在测量的时候,发现采样值在 1023 ~ 1042 和 1279 ~ 1290 两个区间之间无法测 ...

  5. vue中vant-list组件实现下拉刷新,上滑加载

    后端返回的数据是一股脑的情况(不是按pageSize,pageNum一组一组的发送)时,前端使用vant-list实现懒加载需要再写一点js,记录一下 main.js: Vue.use(List); ...

  6. 登录信息localStorage存储

    localStorage拓展了cookie的4K限制,与sessionStorage的唯一一点区别就是localStorage属于永久性存储,而sessionStorage属于当会话结束的时候,ses ...

  7. WebSocket集群分布式改造:实现多人在线聊天室

    前言 书接上文,我们开始对我们的小小聊天室进行集群化改造. 上文地址: [WebSocket入门]手把手搭建WebSocket多人在线聊天室(SpringBoot+WebSocket) 本文内容摘要: ...

  8. XYCTF pwn部分题解 (部分题目详解)

    hello_world(签到) 思路: 这道题就是利用printf函数泄露libc的基地址,然后再次进行栈溢出通过system,/bin/sh来获取shell wp: invisible_flag 思 ...

  9. NumPy 数组切片及数据类型介绍

    NumPy 数组切片 NumPy 数组切片用于从数组中提取子集.它类似于 Python 中的列表切片,但支持多维数组. 一维数组切片 要从一维数组中提取子集,可以使用方括号 [] 并指定切片.切片由起 ...

  10. redis aof数据持久化

    AOF(Append Only File) 将我们所有的命令都记录下来,history,恢复的时候就把这个文件全部再执行一遍! 是什么 以日志的形式来记录每个写操作,将Redis执行过的所有指令记录下 ...