Java使用AES算法进行加密解密
一、加密
- /**
- * 加密
- * @param src 源数据字节数组
- * @param key 密钥字节数组
- * @return 加密后的字节数组
- */
- public static byte[] Encrypt(byte[] src, byte[] key) throws Exception {
- SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
- Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");//"算法/模式/补码方式"
- cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
- return cipher.doFinal(src);
- }
二、解密
- /**
- * 解密
- * @param src 加密后的字节数据
- * @param key 密钥字节数组
- * @return 加密后的字节数组
- * @throws Exception 异常
- */
- public static byte[] Decrypt(byte[] src, byte[] key) throws Exception {
- try {
- SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
- Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
- cipher.init(Cipher.DECRYPT_MODE, skeySpec);
- try {
- return cipher.doFinal(key);
- } catch (Exception e) {
- System.out.println(e.toString());
- return null;
- }
- } catch (Exception ex) {
- System.out.println(ex.toString());
- return null;
- }
- }
三、hex字符串与字节数组互转
- /**
- * 将二进制转换成16进制字符串
- * @param buf 字节数组
- * @return 字符串
- */
- public static String parseByte2HexStr(byte buf[]) {
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < buf.length; i++) {
- String hex = Integer.toHexString(buf[i] & 0xFF);
- if (hex.length() == 1) {
- hex = '0' + hex;
- }
- sb.append(hex.toUpperCase());
- }
- return sb.toString();
- }
- /**
- * 将16进制字符串转换为二进制
- * @param hexStr 字符串
- * @return 字节数组
- */
- public static byte[] parseHexStr2Byte(String hexStr) {
- if (hexStr.length() < 1)
- return null;
- byte[] result = new byte[hexStr.length() / 2];
- for (int i = 0; i < hexStr.length() / 2; i++) {
- int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
- int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
- result[i] = (byte) (high * 16 + low);
- }
- return result;
- }
注:因工作内容常与单片机进行数据传输,所以不能直接使用字符串进行加密解密,需要多进行一次hex字符串的转换
因为上述加密解密使用的补码模式是NoPadding,所以输入的字节必须是128位对应的16个字节的倍数,如有需要可以将补码模式改为以下模式
Java使用AES算法进行加密解密的更多相关文章
- 使用java实现AES算法的加解密(亲测可用)
话不多说,直接上代码 import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.cryp ...
- 微信小程序aes前后端加密解密交互
aes前后端加密解密交互 小程序端 1. 首先引入aes.js /** * [description] CryptoJS v3.1.2 * [description] zhuangzhudada so ...
- golang AES/ECB/PKCS5 加密解密 url-safe-base64
因为项目的需要用到golang的一种特殊的加密解密算法AES/ECB/PKCS5,但是算法并没有包含在标准库中,经过多次失败的尝试,终于解码成功,特此分享: /* 描述 : golang AES/EC ...
- C# 加密(Encrypt) 解密(Decrypt) 操作类 java与 C# 可以相互加密解密
public sealed class EncryptUtils { #region Base64加密解密 /// <summary> /// Base64加密 /// </summ ...
- java DES转C#DES加密解密
一个程序用到java的cn.core.jar加密的,需要在.NET 中解密,发现JAVA的des算法与C#的有点区别. 自己不太懂加密解密算法,所以找了个省事的方法,用IKVM.NET,用这个将cn. ...
- 使用DES算法实现加密解密
使用DES算法实现加密解密 我们常见的加密算法有DES.MD5.IDEA.AES等等,这篇随笔介绍使用DES算法实现加密解密 首先介绍一下DES算法: DES算法为密码体制中的对称密码体制,又被称为美 ...
- DES加密 java与.net可以相互加密解密两种方法
DES加密 java与.net可以相互加密解密两种方法 https://www.cnblogs.com/DrWang/archive/2011/03/30/2000124.html sun.misc. ...
- C#与Java互通AES算法加密解密
/// <summary>AES加密</summary> /// <param name="text">明文</param> /// ...
- .NET与Java互通AES算法加密解密
/// <summary>AES加密</summary> /// <param name="text">明文</param> /// ...
随机推荐
- linux下oracle启动关闭
1.以oracle身份登录数据库,命令:su – oracle 2.执行以下命令查看数据库监听器的状况: lsnrctl status 3.执行以下命令停止数据库监听器运行: lsnrctl stop ...
- iOS多线程GCD的使用
1. GCD 简介 Grand Central Dispatch(GCD)是异步执行任务的技术之一.一般将应用程序中记述的线程管理用的代码在系统级中实现.开发者只需要定义想执行的任务并追加到适当的Di ...
- Linux学习历程——Centos 7 diff命令
一.命令介绍 diff命令用于比较文本差异. diff以逐行的方式,比较文本文件的异同处.如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录. ------------- ...
- 开启远程桌面连接windows的方法以及遇到的问题
确认电脑的远程服务是否已经开启 开始--运行--输入“services.msc ”,打开服务,找到三个remote desktop开头的服务 Remote Desktop Configuration. ...
- qt5.11.2+vs2017环境下opencv3.4.1编译配置
OpenCV是一个开源的计算机库,它可以帮助视觉工作者做很多富有创造性的工作,在图像处理领域扮演着重要的角色.由于opencv3.x的存在,不管你是学生还是研究人员,是专家还是初学者,都可以快速的建立 ...
- Linux新手随手笔记1.7
配置网卡(本地电脑) Vment1 仅主机模式 Vment8 nat模式 物理机 : 192.16810.1 /255.255.255.0 服务器 : 192.168.10.10 /255. ...
- Go 目录
Go语言 go语言初识 基本数据类型和操作符 字符串,时间,流程控制,函数 GOROOT,GOPATH,GOBIN,project目录 数组和切片 指针和内置函数 排序和查找 map
- PHP7.0-PHP7.3新特性与变更
到目前为止,PHP7发布已经升级到7.3,本文来总结一下每个版本的变更与新特性 PHP7.0 1. 组合比较符 (<=>) 组合比较符号用于比较两个表达式.当$a小于.等于或大于$b时它分 ...
- jmeter学习记录--05--Beanshell2
学习beanshell时有不少的例子.遇到不少问题.在此记录下. 测试实例列表 A1:使用Beanshell请求作为测试请求 一个打包的Jar包,直接对其内的方法进行测试. 第一步:将接口jar包要放 ...
- [转帖]rsync简介
rsync用法详细解释 https://www.cnblogs.com/noxy/p/8986164.html 之前一直使用 scp 现在发现这个命令更好一些. 提要 熟悉 rsync 的功能及其特点 ...