带偏移量的AES加密工具

 自定义的一个对称加密工具类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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/483566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux的驱动开发——基于linux的单片机开发简介

1.基于linux的单片机开发和裸机开发的区别 \qquad单片机的裸机开发和基于linux的单片机开发,是有这本质的不同。 \qquad单片机的裸机开发更加底层,它是直接对寄存器进行操作,进而实现单片机的各种功能,即使有些MCU提供了库函数&am…

【计算机网络复习】1.2.4 TCP/IP参考模型和5层参考模型

TCP/IP参考模型和5层参考模型一、OSI参考模型与TCP/IP参考模型二、5层参考模型一、OSI参考模型与TCP/IP参考模型 相同点: 1、都分层 2、基于独立的协议栈的概念 3、可以实现异构网络互联 不同点 1、OSI定义三点:服务、协议、接口 2、OSI先出现&…

量子物理学家:如果宇宙中所有物体突然消失,会剩下一个「空宇宙」吗?

文章来源:TNW如果量子物理学家能够证明现实世界的一切都是不真实的,会发生什么?你愿意接受这个假设吗?如果说,此时此刻你正在看的这篇文章,其实并不存在,你会不会觉得这句话是在胡说&#xff1f…

linux的驱动开发——交叉编译器

1.交叉编译器 \qquadARM裸机、Uboot移植、linux移植这些都需要在linux系统上进行编译,编译就需要编译器。在linux系统中,可以使用gcc命令对c语言程序进行编译,但gcc编译器是针对X86架构的,现在需要对ARM架构的代码进行编译。所以我…

【计算机网络复习 物理层】2.1.1 物理层基本概念

物理层基本概念一、基本概念一、基本概念 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。 物理层主要任务:确定与传输媒体接口有关的特性 >定义标准 机械特性: 定义物理连接的特性,规定…

江西财经大学第二届程序设计竞赛同步赛 H大时钟 (扩展欧几里得)

链接:https://ac.nowcoder.com/acm/contest/635/H来源:牛客网 时间限制:C/C 1秒,其他语言2秒空间限制:C/C 262144K,其他语言524288K64bit IO Format: %lld题目描述 艾兰岛和沃夫岛的时间算法很不一样&…

为什么数学的用途这么大?

来源:遇见数学翻译:萧福坤译自 Science Digest, August 1985原文:http://210.60.224.4/ct/content/1986/00050197/0008.htm我的父亲是一位物理学家,所以我从小耳濡目染,当他与同事讨论问题时,我坐在桌旁,「…

参数列表和数组的相互转换

使用es6的扩展运算符 ...js var arr [1,2,3]; function add(a,b,c){ return a b c; }// add(arr[0],arr[1],arr[2]) add.apply(null,arr); ## 研究Object1. 这是一个函数(类);2. 该类身上有自身的方法还有原型的方法 ![](./img/1.png)1. O…

数据库基础知识——MySQL服务的启动和停止

文章目录1.数据库的启动1.1 从计算机管理启动1.2 从cmd启动2.数据库的停止1.1 从计算机管理停止1.2 从cmd停止\qquad在登录数据库之前,必须保证数据库已经启动。数据库的启动和停止有两种方式:从计算机管理启动和停止和从cmd启动和停止。1.数据库的启动 …

【计算机网络复习 物理层】2.1.2 数据通信基础知识

数据通信基础知识一、典型的数据通信模型二、数据通信相关术语三、三种通信方式四、两种数据传输方式一、典型的数据通信模型 二、数据通信相关术语 通信的目的是传送消息。 数据:传送信息的实体,通常是有意义的符号序列。 信号:数据的电气…

无线网络未来十年十大产业趋势

来源:华为编辑:蒲蒲5G的发展速度非常之快,截止2021年9月,全球已经部署了有176张5G商用网络,超过150万5G站点。5.2亿5G用户的感官体验,也迎来全面升级焕新:高清视频的时长占比提升到了80%;流行的短视频APP已…

git入门(廖雪峰老师)

根据廖雪峰老师的git教程进行学习总结; 1、之前上班用的都是svn进行管理,那么svn和git有什么区别呢? svn是集中式的版本控制系统,而git是分布式版本控制系统,那么集中式和分布式版本控制系统有什么区别呢? …

linux基础知识——进程相关概念

1 什么是程序? \qquad程序,是经过编译完成的二进制文件,程序存储在磁盘上,并不占用系统资源。 2 什么是进程? \qquad进程,是一个抽象概念,进程是程序动态的描述,它在内存中执行&…

【计算机网络复习 物理层】2.1.3 码元、波特、速率、带宽

码元、波特、速率、带宽一、码元二、速率一、码元 码元是指用一个固定时长的信号波形(数字脉冲),代表不同离散值的基本波形,是数字通信中数字信号的计量单位,这个时长内的信号称为k进制码元,而该时长称为码…

智慧竞赛正在升温

来源:混沌巡洋舰原文:摘自 edge 系列图书 《那些最重要的科学新发现》迈克斯泰格马克(MaxTegmark):麻省理工学院物理系终身教授,平行宇宙理论研究专家,未来生命研究所创始人;著有《生命3.0》《穿越平行宇宙…

LeetCode算法

一日一题! 转载于:https://www.cnblogs.com/weibo-blog/p/10779370.html

linux基础知识——CPU相关知识

1.CPU处理程序过程 \qquad在存储介质中,从下至上是进程的时间加载的先后顺序,也是存储空间大小的顺序。 2.MMU(内存管理单元) \qquadMMU是位于CPU内部的一个物理器件。在程序运行时,会产生进程,同时产生虚拟内存空间&#xff0c…

【计算机网络复习 物理层】2.1.4 奈氏准则和香农定理

奈氏准则和香农定理一、失真1.1 失真的一种现象 —— 码间串扰二、奈氏准则三、香农定理四、如何区分一、失真 影响失真程度的因素:1、码元传输速率 2、信号传输距离 3、噪声干扰 4、传输媒体质量 1.1 失真的一种现象 —— 码间串扰 码间串扰:接收端收到…

虚拟在左,真实在右:德国学者用AI合成一亿像素逼真3D图像,可任意旋转

来源:AI科技评论编译:杏花编辑:青暮近日,来自德国埃尔兰根-纽伦堡大学的学者提出了一种新颖的神经网络方法,用于3D图像的场景细化和新视图合成。只需要输入点云和相机参数的初始估计,就可以输出由任意相机角度合成的图像&#xff…

phpmyadmin登陆错误:The requested URL /phpmyadmin was not found on this serve

解决方法: 首先,重新安装apache2: sudo dpkg-reconfigure -plow phpmyadmin 配置时记得选择apache2 如果仍然无法登陆,再对phpmyadmin和apache服务器软链接 sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/ssites-enabled/…