Java对称加解密算法AES
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的更多相关文章
- AES加解密算法Qt实现
[声明] (1) 本文源码 在一位未署名网友源码基础上,利用Qt编程,实现了AES加解密算法,并添加了文件加解密功能.在此表示感谢!该源码仅供学习交流,请勿用于商业目的. (2) 图片及描述 除图1外 ...
- Asp.Net Core 2.0 项目实战(7)MD5加密、AES&DES对称加解密
本文目录 1. 摘要 2. MD5加密封装 3. AES的加密.解密 4. DES加密/解密 5. 总结 1. 摘要 C#中常用的一些加密和解密方案,如:md5加密.RSA加密与解密和DES加密等, ...
- AES加解密算法在Android中的应用及Android4.2以上版本调用问题
from://http://blog.csdn.net/xinzheng_wang/article/details/9159969 AES加解密算法在Android中的应用及Android4.2以上 ...
- 常见的加密和解密算法—AES
一.AES加密概述 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用 ...
- C#加解密算法
先附上源码 加密解密算法目前已经应用到我们生活中的各个方面 加密用于达到以下目的: 保密性:帮助保护用户的标识或数据不被读取. 数据完整性:帮助保护数据不被更改. 身份验证:确保数据发自特定的一方. ...
- DES加解密算法Qt实现
算法解密qt加密table64bit [声明] (1) 本文源码 大部分源码来自:DES算法代码.在此基础上,利用Qt编程进行了改写,实现了DES加解密算法,并添加了文件加解密功能.在此对署名为b ...
- [转]RSA,DSA等加解密算法介绍
From : http://blog.sina.com.cn/s/blog_a9303fd90101cgw4.html 1) MD5/SHA MessageDigest是一个数据的数字指纹. ...
- php des 对称加解密类
<?php header("Content-Type: text/html;charset=utf-8"); /** * des 对称加解密 */ class des { p ...
- 3des加解密算法
编号:1003时间:2016年4月1日09:51:11功能:openssl_3des加解密算法http://blog.csdn.net/alonesword/article/details/17385 ...
- QQ协议的TEA加解密算法
QQ通讯协议里的加解密算法. #include <stdio.h> #include <stdlib.h> #include <memory.h> #include ...
随机推荐
- Flagger on ASM·基于Mixerless Telemetry实现渐进式灰度发布系列 1 遥测数据
简介: 服务网格ASM的Mixerless Telemetry技术,为业务容器提供了无侵入式的遥测数据.遥测数据一方面作为监控指标被ARMPS/prometheus采集,用于服务网格可观测性:另一方面 ...
- 参与 Apache 顶级开源项目的 N 种方式,Apache Dubbo Samples SIG 成立!
简介: 一说到参与开源项目贡献,一般大家的反应都是代码级别的贡献,总觉得我的代码被社区合并了,我才算一个贡献者,这是一个常见的错误认知.其实,在一个开源社区中有非常多的角色是 non-code con ...
- 网不好怎么办?TLS握手带宽直降80%,BabaSSL是怎么做到的?| 龙蜥技术
简介:为了保障数据的安全性,客户端会先和服务器进行 TLS 握手,有什么办法可以减少 TLS 握手的带宽消耗呢? 编者按:BabaSSL 是一款开源的密码库产品,在 GitHub 和龙蜥社区开源,并 ...
- STM32 ADC使用问题
基本信息 MCU:STM32F105R8T6 库:HAL 平台:MDK 精度:12位 问题一 现象: 在测量的时候,发现采样值在 1023 ~ 1042 和 1279 ~ 1290 两个区间之间无法测 ...
- vue中vant-list组件实现下拉刷新,上滑加载
后端返回的数据是一股脑的情况(不是按pageSize,pageNum一组一组的发送)时,前端使用vant-list实现懒加载需要再写一点js,记录一下 main.js: Vue.use(List); ...
- 登录信息localStorage存储
localStorage拓展了cookie的4K限制,与sessionStorage的唯一一点区别就是localStorage属于永久性存储,而sessionStorage属于当会话结束的时候,ses ...
- WebSocket集群分布式改造:实现多人在线聊天室
前言 书接上文,我们开始对我们的小小聊天室进行集群化改造. 上文地址: [WebSocket入门]手把手搭建WebSocket多人在线聊天室(SpringBoot+WebSocket) 本文内容摘要: ...
- XYCTF pwn部分题解 (部分题目详解)
hello_world(签到) 思路: 这道题就是利用printf函数泄露libc的基地址,然后再次进行栈溢出通过system,/bin/sh来获取shell wp: invisible_flag 思 ...
- NumPy 数组切片及数据类型介绍
NumPy 数组切片 NumPy 数组切片用于从数组中提取子集.它类似于 Python 中的列表切片,但支持多维数组. 一维数组切片 要从一维数组中提取子集,可以使用方括号 [] 并指定切片.切片由起 ...
- redis aof数据持久化
AOF(Append Only File) 将我们所有的命令都记录下来,history,恢复的时候就把这个文件全部再执行一遍! 是什么 以日志的形式来记录每个写操作,将Redis执行过的所有指令记录下 ...