注意: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-加密解密工具类相关推荐

  1. 【Android 安全】DEX 加密 ( Java 工具开发 | 加密解密算法 API | 编译代理 Application 依赖库 | 解压依赖库 aar 文件 )

    文章目录 一.加密解密算法 API 二.编译代理 Application 依赖库 三.解压代理 Application 依赖库 aar 文件 参考博客 : [Android 安全]DEX 加密 ( 常 ...

  2. [crypto]-53-openssl命令行的使用(aes/rsa签名校验/rsa加密解密/hmac)

    常用技巧 如何编写一个二进制规律性的文件, 比如你可以编写一个"0123456789abcdef"的文本文件,记得删除换行符然后用ultraedit打开,ctrl+H就可以看到二进 ...

  3. C#实现AES算法对文件的加密解密

    本文实现了C#内置的AES算法对文件进行加密解密.有关AES的介绍不再赘述,主要讲如何实现文件的加密解密.项目工程源代码下载 网上的实现基本上都是要16,24或32位密码,密钥向量也要16位,都固定死 ...

  4. nodejs java rsa_NodeJS加密解密及node-rsa加密解密用法详解

    要用nodejs开发接口,实现远程调用,如果裸奔太危险了,就在网上找了一下nodejs的加密,感觉node-rsa挺不错的,下面来总结一下简单的rsa加密解密用法 初始化环境 新建一个文件夹 node ...

  5. java 加密解密 工具包_java加密解密工具类

    packagecom.founder.mrp.util;importjava.nio.charset.StandardCharsets;importjava.security.Key;importja ...

  6. Java使用Hutool工具完成加密解密

    说明 POM 使用Hutool加密解密工具时,引入如下依赖 <dependency><groupId>cn.hutool</groupId><artifact ...

  7. java android aes加密解密_AES加密解密在JAVA和ANDROID下互通

    昨天外包安卓的那个人说AES的加解密结果不一样.于是百度搜索发现还真是! 贴上AES加密核心: Cipher cipher = Cipher.getInstance("AES/CBC/PKC ...

  8. ios java 通信_AES加密解密 -- iOS、Java之间的互相通信

    简介:AES是一种对称加密方式,旨在取代DES成为广泛使用的标准.虽然语言不同,但是AES的算法是相同的. 关于AES的各种参数请参考下面文章(一定要认真阅读,不然就没办法按照自己的想法进行加密解密) ...

  9. pgp解密 java_Java PGP加密解密实例教程详细操作步骤

    本文将一步步告诉大家PGP的使用步骤,看完大家就立马可以在项目及工作环境中使用起来,so easy!!! 1,首先了解什么是PGP,PGP的工作原理是什么?这个直接百度百科,我不啰嗦. PGP是英文 ...

  10. java rsa 文件加密解密_RSA 加密、解密(自己生成加密解密文件)

    本文是自己阅读了网上的高人们的文章之后,实现功能后总结出来的,方便自己方便他人,不喜勿喷 加密解密需要生成公钥.私钥文件步骤 1.打开终端 输入 openssl 5F88AA4A-3913-4CBC- ...

最新文章

  1. ACMNO.50 完美的代价(主要是不同情况下面的讨论)
  2. Ubuntu-16.04 部署 OpenStack Ocata下
  3. php打印四行三列表格,php打印数组_php数组实例之表格状打印
  4. Java多线程(3) Volatile的实现原理
  5. ThinkPhp框架:父类及表单验证
  6. 大数据之-Hadoop3.x_MapReduce_ReduceTask工作机制并行度---大数据之hadoop3.x工作笔记0125
  7. 细说表单提交的GET和POST
  8. ARCHPR4.54破解版
  9. C/C++ typedef用法!
  10. SPSS 工作空间不足的解决办法
  11. 解决word模板目录域更新失败的问题
  12. 快门光圈感光度口诀_光圈、快门、感光度,弄懂摄影基本算入门了
  13. 磁盘管理之 raid 文件系统 分区
  14. 猜客魔盒二次开发盲盒APP趣味功能讲解(一)
  15. Android 高德地图定位和导航
  16. The Armijo Goldstein line search scheme
  17. 成熟男人的处事说话技巧
  18. jmeter逻辑控制器之while循环控制器(一)
  19. transmac使用方法_使用transmac将镜像写入U盘后 提示格式化才能使用
  20. Google Earth Engine(GEE)——利用Landsat 5 每一期影像制作动画时序并附带时间属性

热门文章

  1. 怎样在服务器找回网站后台密码,宝塔面板忘记后台账号密码怎么找回 一条命令轻松搞定...
  2. 零差检测,外差检测 以及 激光雷达中的零差探测和外差探测
  3. 河南初中计算机考试2028,沾沾喜气!河南28名考生被清北提前录取,竟有27人来自一所中学...
  4. 利用混合高斯模型实现视频中运动目标与背景的分离
  5. imap接收邮件服务器,配置 Outlook 从 IMAP 服务器接收邮件
  6. Python爬虫——Scrapy框架的基本使用
  7. 天空之城:拉马努金式思维训练法
  8. 企业请专职SEO和外包给科技公司做优化,有什么不同?
  9. iOS终于能微信双开了!原理竟然是这样…
  10. Java 金额转换 阿拉伯数字金额转换成汉字大写金额