自定义的一个对称加密工具类AESUtil.java

    public static final String ENCRYPTION_ALGORITHM = "AES";public static final String CIPHER_PARAM = "AES/CBC/PKCS5Padding";private static final String DEFAULT_KEY_AND_IV = "1234567890ABCDEF";//带偏移量的密钥和偏移量似乎是固定16位长度的private static AESUtil instance = null;/** 偏移量 **/private static IvParameterSpec iv;/** 密钥 **/private static SecretKeySpec key;/*** @Title: getInstance* @Description: 单例AES加密工具,使用默认的密钥以及偏移量* @return AESUtil* @author hanzhiyong* @date 2019-4-26下午4:51:12*/public static AESUtil getInstance() {if (instance == null) {instance = new AESUtil(DEFAULT_KEY_AND_IV);}return instance;}/*** @Title:AESUtil* @Description:自定义偏移量构造AES加密工具,使用默认的KEY* @param ivParameter 原始偏移量字符串*/public AESUtil(String ivParameter) {iv = new IvParameterSpec(ivParameter.getBytes());key = new SecretKeySpec(DEFAULT_KEY_AND_IV.getBytes(), ENCRYPTION_ALGORITHM);}/*** @Title:AESUtil* @Description:自定义偏移量和密钥构造AES加密工具* @param secretKey 原始密钥字符串* @param ivParameter 原始偏移量字符串*/public AESUtil(String secretKey, String ivParameter) {iv = new IvParameterSpec(ivParameter.getBytes());key = new SecretKeySpec(secretKey.getBytes(), ENCRYPTION_ALGORITHM);}/*** 取得密钥* * @throws Exception*/public static String getKey() {Base64 base64 = new Base64();System.out.println("密钥String:" + new String(key.getEncoded()));return base64.encodeToString(key.getEncoded());}/*** 取得偏移量*/public static String getIv() throws Exception {Base64 base64 = new Base64();System.out.println("偏移量String:" + new String(iv.getIV()));return base64.encodeToString(iv.getIV());}/*** @Title: encrypt* @Description: AES加密* @param enString 用来加密的明文* @throws Exception* @return String 加密后密文* @author hanzhiyong* @date 2019-4-26下午3:57:17*/public String encrypt(String enString) throws Exception {Base64 base64 = new Base64();Cipher cipher = Cipher.getInstance(CIPHER_PARAM);cipher.init(Cipher.ENCRYPT_MODE, key, iv);byte[] encrypted = cipher.doFinal(enString.getBytes("utf-8"));return base64.encodeToString(encrypted);}/*** @Title: decrypt* @Description: AES解密* @param deString 用来解密的密文* @throws Exception* @return String 解密后的明文* @author hanzhiyong* @date 2019-4-26下午3:58:06*/public String decrypt(String deString) throws Exception {try {Base64 base64 = new Base64();Cipher cipher = Cipher.getInstance(CIPHER_PARAM);cipher.init(Cipher.DECRYPT_MODE, key, iv);byte[] decrypted = base64.decode(deString);byte[] original = cipher.doFinal(decrypted);return new String(original, "utf-8");} catch (Exception ex) {return null;}}/*** @Title: main* @Description: 加密解密测试用例* @param args* @throws Exception* @return void* @author hanzhiyong* @date 2019-4-23下午6:41:16*/@Deprecatedpublic static void main(String args[]) throws Exception {String sourceString = "测试用来加密的数据";System.out.println("sourceString加密前: " + sourceString);System.out.println("=========================单例的加密工具=========================");System.out.println("base64加密后密钥:" + AESUtil.getInstance().getKey());System.out.println("base64加密后偏移量:" + AESUtil.getInstance().getIv());        System.out.println("加密后sourceString: " + AESUtil.getInstance().encrypt(sourceString));System.out.println("解密后sourceString: " + AESUtil.getInstance().decrypt(AESUtil.getInstance().encrypt(sourceString)));AESUtil aesUtil = new AESUtil("0123456789111111");System.out.println("=========================自定义偏移量的工具=========================");System.out.println("base64加密后密钥:" + aesUtil.getKey());System.out.println("base64加密后偏移量:" + aesUtil.getIv());System.out.println("加密后sourceString: " + aesUtil.encrypt(sourceString));System.out.println("解密后sourceString: " + aesUtil.decrypt(aesUtil.encrypt(sourceString)));}

转载于:https://www.cnblogs.com/hanzhiyong/p/10775954.html

带偏移量的AES加密工具相关推荐

  1. Android加密工具类,Android AES加密工具类分享

    1.AES加密工具类 java不支持PKCS7Padding,只支持PKCS5Padding.我们知道加密算法由算法+模式+填充组成,下一篇介绍iOS和Android通用的AES加密,本篇文章使用PK ...

  2. Java AES加密工具类

    import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.crypto.Cipher; import jav ...

  3. AES加密工具类AESUtil

    本文工具类针对的是Java环境下, AES对称加密的工具类, 包括加密和解密 package com.zhouzhou.flow.util;import javax.crypto.Cipher; im ...

  4. 【PC工具】U盘数据加密工具,windows自带U盘文件加密工具体验,测试加密时间...

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 最近U盘使用比较多,经常把重要文件备份和个人信息数据存储在U盘上.感觉不太安全,万一U ...

  5. Java中的AES加密和解密(CBC模式)

    通过有线方式传输诸如纯文本密码之类的机密数据总是容易受到安全性的影响,始终建议对此类信息进行加密并使用SSL传输这些机密数据.Java为此提供了多种加密算法.在本文中,我们将讨论Java中具有CBC模 ...

  6. 每日一课 | AES加密和解密(CBC模式)

    通过有线方式传输诸如纯文本密码之类的机密数据总是容易受到安全性的影响,始终建议对此类信息进行加密并使用SSL传输这些机密数据.Java为此提供了多种加密算法.在本文中,我们将讨论Java中具有CBC模 ...

  7. 自学Android开发 AES加密

    目录 一.问题 二.解决源码 一.问题 在Java 后端发来的AES加密数据时,发现Android APP不能解密 而且Android 端 加密同样的数据返回的结果居然不一致,所以我在网上查询后,发现 ...

  8. AES加密解密的基本原理与Python爬取AES加密接口

    大家好,我是小小明,今天我要带大家学习AES加密的基本原理,并爬取一个经过AES加密的接口.一起来学习吧! AES编码解码基础 AES简介 AES(Advanced Encryption Standa ...

  9. java aes 工具类_AESUtil Java AES 加密解密工具类

    package com.singlee.util; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; impo ...

最新文章

  1. jdk8中流的使用(二)
  2. [PAL编程规范]SAP HANA PAL多项式回归预测分析Polynomial Regression编程规范FORECASTWITHPOLYNOMIALR(预测)...
  3. 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmContinueOptimizati() 函数分析 )
  4. 一个有第三方ebuild的网站
  5. 增量调制原理matlab仿真,增量调制(DM  △M)
  6. 滚动条颜色样式设置 说明
  7. Pytest入门【2】
  8. C语言——字符串函数
  9. 关于Web面试的基础知识点--Html+Css(四)
  10. django默认缓存是多大_半个月搞定Django绝不是空话
  11. Linux x86主机运行天数是是24.8的倍数都有可能引发oracle bug及解决方法
  12. python怎么输出键值对_python 获取字典键值对的实现
  13. Eucalyptus学习汇总
  14. 人人商城小程序getUserProfile登录接口升级
  15. 千层浪软件下载_千层浪app聚合
  16. ubuntu安装ROS运行rosdep init错误,cannot download default sources list from....
  17. 云虚拟主机bch 和 云服务器bcc,虚拟主机bch和云服务器bcc
  18. 语音识别(ASR)论文优选:Icassp 2022 M2MeT方案总结
  19. 用python画环形图
  20. 耐人思考的“30秒法则”

热门文章

  1. c html联调,JS与native 交互简单应用
  2. oracle trigger 延迟执行_一文详解Spring任务执行和调度
  3. 智慧交通day02-车流量检测实现09:SORT/deepSORT
  4. pythonfor循环列表排序_Python Day4950(for循环语句整理)
  5. 一、AJAX学习笔记——原生AJAX (ajax简介、XML简介、ajax优缺点、ajax的使用)
  6. 三、MySQL子查询学习笔记(标量子查询、列子查询、行子查询、表子查询 详解)
  7. LeetCode 369. 给单链表加一(递归)
  8. linux socket 面试题,面试题
  9. 使用c++查看linux服务器某个进程正在使用的内存_Linux 系统管理
  10. python面试题总结(一)字符串反转,写取指定数函数