一、加密

  1. /**
  2. * 加密
  3. * @param src 源数据字节数组
  4. * @param key 密钥字节数组
  5. * @return 加密后的字节数组
  6. */
  7. public static byte[] Encrypt(byte[] src, byte[] key) throws Exception {
  8. SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
  9. Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");//"算法/模式/补码方式"
  10. cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
  11. return cipher.doFinal(src);
  12. }

二、解密

  1. /**
  2. * 解密
  3. * @param src 加密后的字节数据
  4. * @param key 密钥字节数组
  5. * @return 加密后的字节数组
  6. * @throws Exception 异常
  7. */
  8. public static byte[] Decrypt(byte[] src, byte[] key) throws Exception {
  9. try {
  10. SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
  11. Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
  12. cipher.init(Cipher.DECRYPT_MODE, skeySpec);
  13. try {
  14. return cipher.doFinal(key);
  15. } catch (Exception e) {
  16. System.out.println(e.toString());
  17. return null;
  18. }
  19. } catch (Exception ex) {
  20. System.out.println(ex.toString());
  21. return null;
  22. }
  23. }

三、hex字符串与字节数组互转

  1. /**
  2. * 将二进制转换成16进制字符串
  3. * @param buf 字节数组
  4. * @return 字符串
  5. */
  6. public static String parseByte2HexStr(byte buf[]) {
  7. StringBuffer sb = new StringBuffer();
  8. for (int i = 0; i < buf.length; i++) {
  9. String hex = Integer.toHexString(buf[i] & 0xFF);
  10. if (hex.length() == 1) {
  11. hex = '0' + hex;
  12. }
  13. sb.append(hex.toUpperCase());
  14. }
  15. return sb.toString();
  16. }
  17.  
  18. /**
  19. * 将16进制字符串转换为二进制
  20. * @param hexStr 字符串
  21. * @return 字节数组
  22. */
  23. public static byte[] parseHexStr2Byte(String hexStr) {
  24. if (hexStr.length() < 1)
  25. return null;
  26. byte[] result = new byte[hexStr.length() / 2];
  27. for (int i = 0; i < hexStr.length() / 2; i++) {
  28. int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
  29. int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
  30. result[i] = (byte) (high * 16 + low);
  31. }
  32. return result;
  33. }

注:因工作内容常与单片机进行数据传输,所以不能直接使用字符串进行加密解密,需要多进行一次hex字符串的转换

因为上述加密解密使用的补码模式是NoPadding,所以输入的字节必须是128位对应的16个字节的倍数,如有需要可以将补码模式改为以下模式

Java使用AES算法进行加密解密的更多相关文章

  1. 使用java实现AES算法的加解密(亲测可用)

    话不多说,直接上代码 import javax.crypto.Cipher;   import javax.crypto.spec.IvParameterSpec; import javax.cryp ...

  2. 微信小程序aes前后端加密解密交互

    aes前后端加密解密交互 小程序端 1. 首先引入aes.js /** * [description] CryptoJS v3.1.2 * [description] zhuangzhudada so ...

  3. golang AES/ECB/PKCS5 加密解密 url-safe-base64

    因为项目的需要用到golang的一种特殊的加密解密算法AES/ECB/PKCS5,但是算法并没有包含在标准库中,经过多次失败的尝试,终于解码成功,特此分享: /* 描述 : golang AES/EC ...

  4. C# 加密(Encrypt) 解密(Decrypt) 操作类 java与 C# 可以相互加密解密

    public sealed class EncryptUtils { #region Base64加密解密 /// <summary> /// Base64加密 /// </summ ...

  5. java DES转C#DES加密解密

    一个程序用到java的cn.core.jar加密的,需要在.NET 中解密,发现JAVA的des算法与C#的有点区别. 自己不太懂加密解密算法,所以找了个省事的方法,用IKVM.NET,用这个将cn. ...

  6. 使用DES算法实现加密解密

    使用DES算法实现加密解密 我们常见的加密算法有DES.MD5.IDEA.AES等等,这篇随笔介绍使用DES算法实现加密解密 首先介绍一下DES算法: DES算法为密码体制中的对称密码体制,又被称为美 ...

  7. DES加密 java与.net可以相互加密解密两种方法

    DES加密 java与.net可以相互加密解密两种方法 https://www.cnblogs.com/DrWang/archive/2011/03/30/2000124.html sun.misc. ...

  8. C#与Java互通AES算法加密解密

    /// <summary>AES加密</summary> /// <param name="text">明文</param> /// ...

  9. .NET与Java互通AES算法加密解密

    /// <summary>AES加密</summary> /// <param name="text">明文</param> /// ...

随机推荐

  1. linux下oracle启动关闭

    1.以oracle身份登录数据库,命令:su – oracle 2.执行以下命令查看数据库监听器的状况: lsnrctl status 3.执行以下命令停止数据库监听器运行: lsnrctl stop ...

  2. iOS多线程GCD的使用

    1. GCD 简介 Grand Central Dispatch(GCD)是异步执行任务的技术之一.一般将应用程序中记述的线程管理用的代码在系统级中实现.开发者只需要定义想执行的任务并追加到适当的Di ...

  3. Linux学习历程——Centos 7 diff命令

    一.命令介绍 diff命令用于比较文本差异. diff以逐行的方式,比较文本文件的异同处.如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录. ------------- ...

  4. 开启远程桌面连接windows的方法以及遇到的问题

    确认电脑的远程服务是否已经开启 开始--运行--输入“services.msc ”,打开服务,找到三个remote desktop开头的服务 Remote Desktop Configuration. ...

  5. qt5.11.2+vs2017环境下opencv3.4.1编译配置

    OpenCV是一个开源的计算机库,它可以帮助视觉工作者做很多富有创造性的工作,在图像处理领域扮演着重要的角色.由于opencv3.x的存在,不管你是学生还是研究人员,是专家还是初学者,都可以快速的建立 ...

  6. Linux新手随手笔记1.7

    配置网卡(本地电脑) Vment1   仅主机模式 Vment8   nat模式 物理机 : 192.16810.1  /255.255.255.0 服务器 : 192.168.10.10 /255. ...

  7. Go 目录

    Go语言 go语言初识 基本数据类型和操作符 字符串,时间,流程控制,函数 GOROOT,GOPATH,GOBIN,project目录 数组和切片 指针和内置函数 排序和查找 map

  8. PHP7.0-PHP7.3新特性与变更

    到目前为止,PHP7发布已经升级到7.3,本文来总结一下每个版本的变更与新特性 PHP7.0 1. 组合比较符 (<=>) 组合比较符号用于比较两个表达式.当$a小于.等于或大于$b时它分 ...

  9. jmeter学习记录--05--Beanshell2

    学习beanshell时有不少的例子.遇到不少问题.在此记录下. 测试实例列表 A1:使用Beanshell请求作为测试请求 一个打包的Jar包,直接对其内的方法进行测试. 第一步:将接口jar包要放 ...

  10. [转帖]rsync简介

    rsync用法详细解释 https://www.cnblogs.com/noxy/p/8986164.html 之前一直使用 scp 现在发现这个命令更好一些. 提要 熟悉 rsync 的功能及其特点 ...