Java对称加解密算法AES

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec; /**
* 敏感加密入参出参字段工具类
*/
public class AesEncryptUtils { private static Logger logger = LoggerFactory.getLogger(AesEncryptUtils.class);
private static final String AES_ALG = "AES";
/**
* AES算法
*/
private static final String AES_CBC_PCK_ALG = "AES/ECB/PKCS5Padding"; public static final String CHARSET_UTF8 = "UTF-8"; /**
* AES加密
*
* @param srcContent
* @return
* @throws Exception
*/
public static String aesEncryptContent(String srcContent,String AES_KEY) {
try{
//如果为空不加密
if(StringUtils.isEmpty(srcContent)){
return srcContent;
}
String aesStr = aesEncrypt(srcContent,AES_KEY,CHARSET_UTF8);
return aesStr;
}catch (Exception e){
logger.error("AES加密失败,srcContent为{}",srcContent);
throw new RuntimeException("AES加密失败");
}
} /**
* AES解密
*
* @param aesContent
* @return
* @throws Exception
*/
public static String aesDecryptContent(String aesContent,String AES_KEY){
String srcStr = "";
try{
//如果为空不加密
if(StringUtils.isEmpty(aesContent)){
return aesContent;
}
srcStr = aesDecrypt(aesContent,AES_KEY,CHARSET_UTF8);
}catch (Exception e){
logger.error("AES解密失败,aesContent为{}",aesContent);
}
return srcStr;
} /**
* AES加密
*
* @param content
* @param aesKey
* @param charset
* @return
*/
private static String aesEncrypt(String content, String aesKey, String charset)
throws Exception {
Cipher cipher = Cipher.getInstance(AES_CBC_PCK_ALG);
cipher.init(Cipher.ENCRYPT_MODE,
new SecretKeySpec(aesKey.getBytes(), AES_ALG)); byte[] encryptBytes = cipher.doFinal(content.getBytes(charset));
return new String(Base64.encodeBase64(encryptBytes));
} /**
* AES解密
*
* @param content
* @param key
* @param charset
* @return
*/
private static String aesDecrypt(String content, String key, String charset)
throws Exception {
Cipher cipher = Cipher.getInstance(AES_CBC_PCK_ALG);
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes(),
AES_ALG));
byte[] cleanBytes = cipher.doFinal(Base64.decodeBase64(content.getBytes()));
return new String(cleanBytes, charset);
} /**
* 手机号加密后字符串为str:OgB897+iuJYjuw4H1Ou3xw==
* 手机号解密后字符串为str2:19966667777
* 姓名加密后字符串为str:rfGUZPPHuG91j/cEjJJbOA==
* 姓名解密后字符串为str2:张三
* 身份证号加密后字符串为str:UCK1di7NzzjjjNAGZMg2iS/c6jnEv0fips1zo7ww4RQ=
* 身份证号解密后字符串为str2:463300122545556699
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception{
try {
//注意:密钥需要32位
String key = "testkey111testkey111testkey11132";
String str = aesEncryptContent("19966667777", key);
System.out.println("手机号加密后字符串为str:"+str);
String str2 = aesDecryptContent(str, key);
System.out.println("手机号解密后字符串为str2:"+str2); str = aesEncryptContent("张三", key);
System.out.println("姓名加密后字符串为str:"+str);
str2 = aesDecryptContent(str, key);
System.out.println("姓名解密后字符串为str2:"+str2); str = aesEncryptContent("463300122545556699", key);
System.out.println("身份证号加密后字符串为str:"+str);
str2 = aesDecryptContent(str, key);
System.out.println("身份证号解密后字符串为str2:"+str2); } catch (Exception e) {
e.printStackTrace();
}
} }

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. 万物智联时代的终端智能「管家」 重磅升级:混合云IoT一体机

    ​简介: 「混合云IoT一体机」边缘部署.开箱即用.安全稳定.智管易用,通过定制软件和硬件相结合,预先定制.集成.测试和优化,实现快速部署和远程运维,并提升后续系统可用性和运维效率,是万物互联时代企业 ...

  2. [Py] Jupyter 写入和执行 python 文件

    以 %%writefile request.py 开头. 下面写 python 代码,然后 shift + enter 键,可以把 python 代码写入开头指定的文件中,没有则自动创建. 以 %ru ...

  3. dotnet 6 推荐一个可代替 .NET Remoting 的 IPC 库

    本文将来和大家推荐一个基于最友好 MIT 协议的完全在 GitHub 上开源的,可代替 .NET Remoting 的 IPC 本机多进程通讯库 本机内多进程通讯 IPC 不同于跨设备系统的 RPC ...

  4. 2018-11-23-国内好用的-DNS-列表

    title author date CreateTime categories 国内好用的 DNS 列表 lindexi 2018-11-23 12:45:57 +0800 2018-11-23 12 ...

  5. Surge多配置文件聚合配置方法

    目录 摘要 1. Surge配置原理 2. Surge托管配置 3. Surge多配置文件聚合配置 (1)找到配置文件 (2)编辑配置文件 参考 摘要 Surge 是一个在 macOS 和iOS 平台 ...

  6. 使用.NET查询日出日落时间

    在WPF中,通过资源文件实现主题切换是个常见的功能,有不少文章介绍了如何实现手动切换主题.那如何实现自动切换主题呢?通常有两种机制:一是跟随系统明暗主题切换,二是像手机操作系统那样根据日出日落时间自动 ...

  7. Typora最后的免费版本0.11.18

    Typora最后的免费版本为0.11.18. 之后的1.x开始收费. 免费版本0.11.18的百度网盘链接如下(永久链接): 链接:https://pan.baidu.com/s/1XizAD0SFp ...

  8. Ajax 请求总共有八种 Callback

    1)onSuccess 2)onFailure 3)onUninitialized 4)onLoading 5)onLoaded 6)onInteractive 7)onComplete 8)onEx ...

  9. containerd 源码分析:kubelet 和 containerd 交互

    0. 前言 Kubernetes:kubelet 源码分析之创建 pod 流程 介绍了 kubelet 创建 pod 的流程,其中介绍了 kubelet 调用 runtime cri 接口创建 pod ...

  10. linux sort命令的重要用法:按分隔符/字母/数字/月份进行排序

    1.指定分隔符,以某一列进行排序并输出 #-t 指定一个分隔符 #-k 后面跟数字,指定按第几列进行排序 #-r 反序排序(升序变成降序) #按":"做分隔符,以第3列,也就是用户 ...