aes离线解密工具_AES-加密解密工具类
注意:AES加密算法对于不同系统之间的tokens可能会不同,需要在相同的系统间使用
如果设置为private,在其它类调用AES访问不了这个tokens常量,需要自主定义一个tokens或者在配置文件里定义一个tokens,这里的定义将没有意义
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
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;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* description: AES对称加密和解密
* create by: yonyong
* create time: 2019/3/1 18:11
*/
public class AES {
public static final String TOKENS = "yonyong";
/*
* 加密
* 1.构造密钥生成器
* 2.根据ecnodeRules规则初始化密钥生成器
* 3.产生密钥
* 4.创建和初始化密码器
* 5.内容加密
* 6.返回字符串
*/
public static String AESEncode(String encodeRules,String content){
try {
//1.构造密钥生成器,指定为AES算法,不区分大小写
KeyGenerator keygen=KeyGenerator.getInstance("AES");
//2.根据ecnodeRules规则初始化密钥生成器
//生成一个128位的随机源,根据传入的字节数组
keygen.init(128, new SecureRandom(encodeRules.getBytes()));
//3.产生原始对称密钥
SecretKey original_key=keygen.generateKey();
//4.获得原始对称密钥的字节数组
byte [] raw=original_key.getEncoded();
//5.根据字节数组生成AES密钥
SecretKey key=new SecretKeySpec(raw, "AES");
//6.根据指定算法AES自成密码器
Cipher cipher=Cipher.getInstance("AES");
//7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密解密(Decrypt_mode)操作,第二个参数为使用的KEY
cipher.init(Cipher.ENCRYPT_MODE, key);
//8.获取加密内容的字节数组(这里要设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码
byte [] byte_encode=content.getBytes("utf-8");
//9.根据密码器的初始化方式--加密:将数据加密
byte [] byte_AES=cipher.doFinal(byte_encode);
//10.将加密后的数据转换为字符串
//这里用Base64Encoder中会找不到包
//解决办法:
//在项目的Build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了。
String AES_encode=new String(new BASE64Encoder().encode(byte_AES));
//11.将字符串返回
return AES_encode;
} 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();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//如果有错就返加nulll
return null;
}
/*
* 解密
* 解密过程:
* 1.同加密1-4步
* 2.将加密后的字符串反纺成byte[]数组
* 3.将加密内容解密
*/
public static String AESDncode(String encodeRules,String content){
try {
//1.构造密钥生成器,指定为AES算法,不区分大小写
KeyGenerator keygen=KeyGenerator.getInstance("AES");
//2.根据ecnodeRules规则初始化密钥生成器
//生成一个128位的随机源,根据传入的字节数组
keygen.init(128, new SecureRandom(encodeRules.getBytes()));
//3.产生原始对称密钥
SecretKey original_key=keygen.generateKey();
//4.获得原始对称密钥的字节数组
byte [] raw=original_key.getEncoded();
//5.根据字节数组生成AES密钥
SecretKey key=new SecretKeySpec(raw, "AES");
//6.根据指定算法AES自成密码器
Cipher cipher=Cipher.getInstance("AES");
//7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密(Decrypt_mode)操作,第二个参数为使用的KEY
cipher.init(Cipher.DECRYPT_MODE, key);
//8.将加密并编码后的内容解码成字节数组
byte [] byte_content= new BASE64Decoder().decodeBuffer(content);
/*
* 解密
*/
byte [] byte_decode=cipher.doFinal(byte_content);
String AES_decode=new String(byte_decode,"utf-8");
return AES_decode;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
//如果有错就返加nulll
return null;
}
public static void main(String[] args) {
System.out.println(AES.AESEncode(TOKENS,"334"));
System.out.println(AES.AESDncode(TOKENS,"iVEX6hMh0ucmzpuk4C9R5A=="));
}
}
aes离线解密工具_AES-加密解密工具类相关推荐
- 【Android 安全】DEX 加密 ( Java 工具开发 | 加密解密算法 API | 编译代理 Application 依赖库 | 解压依赖库 aar 文件 )
文章目录 一.加密解密算法 API 二.编译代理 Application 依赖库 三.解压代理 Application 依赖库 aar 文件 参考博客 : [Android 安全]DEX 加密 ( 常 ...
- [crypto]-53-openssl命令行的使用(aes/rsa签名校验/rsa加密解密/hmac)
常用技巧 如何编写一个二进制规律性的文件, 比如你可以编写一个"0123456789abcdef"的文本文件,记得删除换行符然后用ultraedit打开,ctrl+H就可以看到二进 ...
- C#实现AES算法对文件的加密解密
本文实现了C#内置的AES算法对文件进行加密解密.有关AES的介绍不再赘述,主要讲如何实现文件的加密解密.项目工程源代码下载 网上的实现基本上都是要16,24或32位密码,密钥向量也要16位,都固定死 ...
- nodejs java rsa_NodeJS加密解密及node-rsa加密解密用法详解
要用nodejs开发接口,实现远程调用,如果裸奔太危险了,就在网上找了一下nodejs的加密,感觉node-rsa挺不错的,下面来总结一下简单的rsa加密解密用法 初始化环境 新建一个文件夹 node ...
- java 加密解密 工具包_java加密解密工具类
packagecom.founder.mrp.util;importjava.nio.charset.StandardCharsets;importjava.security.Key;importja ...
- Java使用Hutool工具完成加密解密
说明 POM 使用Hutool加密解密工具时,引入如下依赖 <dependency><groupId>cn.hutool</groupId><artifact ...
- java android aes加密解密_AES加密解密在JAVA和ANDROID下互通
昨天外包安卓的那个人说AES的加解密结果不一样.于是百度搜索发现还真是! 贴上AES加密核心: Cipher cipher = Cipher.getInstance("AES/CBC/PKC ...
- ios java 通信_AES加密解密 -- iOS、Java之间的互相通信
简介:AES是一种对称加密方式,旨在取代DES成为广泛使用的标准.虽然语言不同,但是AES的算法是相同的. 关于AES的各种参数请参考下面文章(一定要认真阅读,不然就没办法按照自己的想法进行加密解密) ...
- pgp解密 java_Java PGP加密解密实例教程详细操作步骤
本文将一步步告诉大家PGP的使用步骤,看完大家就立马可以在项目及工作环境中使用起来,so easy!!! 1,首先了解什么是PGP,PGP的工作原理是什么?这个直接百度百科,我不啰嗦. PGP是英文 ...
- java rsa 文件加密解密_RSA 加密、解密(自己生成加密解密文件)
本文是自己阅读了网上的高人们的文章之后,实现功能后总结出来的,方便自己方便他人,不喜勿喷 加密解密需要生成公钥.私钥文件步骤 1.打开终端 输入 openssl 5F88AA4A-3913-4CBC- ...
最新文章
- ACMNO.50 完美的代价(主要是不同情况下面的讨论)
- Ubuntu-16.04 部署 OpenStack Ocata下
- php打印四行三列表格,php打印数组_php数组实例之表格状打印
- Java多线程(3) Volatile的实现原理
- ThinkPhp框架:父类及表单验证
- 大数据之-Hadoop3.x_MapReduce_ReduceTask工作机制并行度---大数据之hadoop3.x工作笔记0125
- 细说表单提交的GET和POST
- ARCHPR4.54破解版
- C/C++ typedef用法!
- SPSS 工作空间不足的解决办法
- 解决word模板目录域更新失败的问题
- 快门光圈感光度口诀_光圈、快门、感光度,弄懂摄影基本算入门了
- 磁盘管理之 raid 文件系统 分区
- 猜客魔盒二次开发盲盒APP趣味功能讲解(一)
- Android 高德地图定位和导航
- The Armijo Goldstein line search scheme
- 成熟男人的处事说话技巧
- jmeter逻辑控制器之while循环控制器(一)
- transmac使用方法_使用transmac将镜像写入U盘后 提示格式化才能使用
- Google Earth Engine(GEE)——利用Landsat 5 每一期影像制作动画时序并附带时间属性
热门文章
- 怎样在服务器找回网站后台密码,宝塔面板忘记后台账号密码怎么找回 一条命令轻松搞定...
- 零差检测,外差检测 以及 激光雷达中的零差探测和外差探测
- 河南初中计算机考试2028,沾沾喜气!河南28名考生被清北提前录取,竟有27人来自一所中学...
- 利用混合高斯模型实现视频中运动目标与背景的分离
- imap接收邮件服务器,配置 Outlook 从 IMAP 服务器接收邮件
- Python爬虫——Scrapy框架的基本使用
- 天空之城:拉马努金式思维训练法
- 企业请专职SEO和外包给科技公司做优化,有什么不同?
- iOS终于能微信双开了!原理竟然是这样…
- Java 金额转换 阿拉伯数字金额转换成汉字大写金额