最近要测试一个借口,借口的传值参数是使用AES加密,偏移量为0000000000000000,秘钥:12345678901234567890123456789012,加密后内容转成16进制发送,用网上的代码一直没实现,最后发送是因为jre的两个jar包需要升级,支持key大于16位。

两个jar包:US_export_policy.jar、local_policy.jar,下载地址:https://files.cnblogs.com/files/tech-test/security.zip

AES加密工具网址:http://tool.chacuo.net/cryptaes

16进制与字符串互转:http://www.bejson.com/convert/ox2str/

代码如下:

  1 package com.test;
2 import javax.crypto.Cipher;
3 import javax.crypto.spec.IvParameterSpec;
4 import javax.crypto.spec.SecretKeySpec;
5 import java.util.Base64.Encoder;
6 import java.util.Base64;
7 import java.util.Base64.Decoder;
8
9
10 /**
11 * AES/CBC/PKCS5Padding 对称加密
12 * @author jia
13 *
14 */
15 public class AEStest {
16
17 private static final String ALGORITHM = "AES/CBC/PKCS5Padding";
18 /**
19 * 数据加密
20 * @param srcData
21 * @param key
22 * @param iv
23 * @return
24 */
25 public static String encrypt(String srcData,byte[] key,byte[] iv)
26 {
27 SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
28 Cipher cipher;
29 String encodeBase64String = null;
30 try {
31 cipher = Cipher.getInstance(ALGORITHM);
32 cipher.init(Cipher.ENCRYPT_MODE, keySpec, new IvParameterSpec(iv));
33 byte[] encData = cipher.doFinal(srcData.getBytes());
34 encodeBase64String = Base64.getEncoder().encodeToString(encData);
35 //encodeBase64String = Base64.encodeBase64String(encData);
36 } catch (Exception e) {
37 e.printStackTrace();
38 }
39 return encodeBase64String;
40 }
41
42 /**
43 * 数据解密
44 * @param encDataStr
45 * @param key
46 * @param iv
47 * @return
48 */
49 public static String decrypt(String encDataStr,byte[] key,byte[] iv)
50 {
51 byte[] encData = Base64.getDecoder().decode(encDataStr);
52 // byte[] encData = Base64.decodeBase64(encDataStr);
53 SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
54 Cipher cipher;
55 byte[] decbbdt = null;
56 try {
57 cipher = Cipher.getInstance(ALGORITHM);
58 cipher.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(iv));
59 decbbdt = cipher.doFinal(encData);
60 } catch (Exception e) {
61 e.printStackTrace();
62 }
63 return new String(decbbdt);
64 }
65
66
67 public static String str2HexStr(String str) {
68 char[] chars = "0123456789ABCDEF".toCharArray();
69 StringBuilder sb = new StringBuilder("");
70 byte[] bs = str.getBytes();
71 int bit;
72 for (int i = 0; i < bs.length; i++) {
73 bit = (bs[i] & 0x0f0) >> 4;
74 sb.append(chars[bit]);
75 bit = bs[i] & 0x0f;
76 sb.append(chars[bit]);
77 // sb.append(' ');
78 }
79 return sb.toString().trim();
80 }
81
82 /**
83 * 16进制直接转换成为字符串(无需Unicode解码)
84 * @param hexStr
85 * @return
86 */
87 public static String hexStr2Str(String hexStr) {
88 String str = "0123456789ABCDEF";
89 char[] hexs = hexStr.toCharArray();
90 byte[] bytes = new byte[hexStr.length() / 2];
91 int n;
92 for (int i = 0; i < bytes.length; i++) {
93 n = str.indexOf(hexs[2 * i]) * 16;
94 n += str.indexOf(hexs[2 * i + 1]);
95 bytes[i] = (byte) (n & 0xff);
96 }
97 return new String(bytes);
98 }
99
100 public static void main(String[] args) throws Exception {
101 String str = "12345678901234567890123456789012";
102 byte[] s = str.getBytes();
103 String s2 = "12345678ilkljklkjv";
104
105
106 String iv = "0000000000000000";
107 System.out.println("加密前: "+s2);
108 String encrypt = AEStest.encrypt(s2, s, iv.getBytes());
109 System.out.println("加密后: "+new String(encrypt));
110 String hex = AEStest.str2HexStr(encrypt);
111 System.out.println("加密后转16进制: "+new String(hex));
112 String tohex = AEStest.hexStr2Str(hex);
113 System.out.println("16进制转加密后: "+new String(tohex));
114
115
116 String decrypt = AEStest.decrypt(tohex, s, iv.getBytes());
117 System.out.println("解密后: "+decrypt);
118 }
119 }

java实现AES/CBC/pack5padding加解密算法的更多相关文章

  1. Java 使用AES/CBC/PKCS7Padding 加解密字符串

    介于java 不支持PKCS7Padding,只支持PKCS5Padding 但是PKCS7Padding 和 PKCS5Padding 没有什么区别要实现在java端用PKCS7Padding填充, ...

  2. C++ 和 java 使用 AES CBC 128 加解密

    Java 使用jce, code: import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax ...

  3. JAVA实现AES的加密和解密算法

    原文 JAVA实现AES的加密和解密算法 import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import ja ...

  4. JAVA AES CBC PKCS5Padding加解密

    package com.hzxc.groupactivity.util; /** * Created by hdwang on 2019/1/17. */ import org.slf4j.Logge ...

  5. AES CBC/CTR 加解密原理

    So, lets look at how CBC works first. The following picture shows the encryption when using CBC (in ...

  6. eclipse JAVA实现AES的加密和解密算法

    import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.Secre ...

  7. openssl:AES CBC PKCS5 加解密 (C/GOLANG)

    #include <openssl/aes.h> /* AES_CBC_PKCS5_Encrypt * 入参: * src:明文 * srcLen:明文长度 * key:密钥 长度只能是1 ...

  8. python 实现 AES CBC模式加解密

    AES加密方式有五种:ECB, CBC, CTR, CFB, OFB 从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现 python 在 Windows下使用AE ...

  9. java/php DES/CBC/PKCS5Padding加密解密算法实现过程

    先看java代码 public static String encrypt(String message, String key) throws Exception { Cipher cipher = ...

  10. 手机号的 AES/CBC/PKCS7Padding 加解密

    前言:接口中上次的手机号码和密码是传入的加密的,模拟自动化的时候也需要先对数据进行加密 1.各种语言实现 网上已经各种语言实现好的AES加密,可以点击查看:http://outofmemory.cn/ ...

随机推荐

  1. ppt 优化篇

    字体整体调节 --可以适用替换功能 去掉动画---动画-删除动画 批量替换字体颜色 编辑模板--视图-幻灯片模板 图片裁剪对齐.视频大小相同--islide 工具 视频剪辑:ppt 自带功能,剪映 横 ...

  2. GPIO原理及配制方法

    GPIO原理及配制方法 引用地址: ARM SOC芯片的GPIO结构示意图 @@@ GPIO的八种模式 1,输入浮空模式 2,输入上拉模式 3,输入下拉模式 4,模拟输入模式 5,开漏输出模式 6,开 ...

  3. oracle之PGA相关的sql

    在上篇文章中初步介绍了关于pga的基础知识,阅读了其他很多关于pga的内容,今天总结一些关于pga的sql和其他知识. 在网上找了相关资料整理而来,可能有点乱,先码上后再整理下. https://bl ...

  4. Fortran处理无符号整型unsigned integer

    背景: 计算机是以一串二进制数,用约定的表示方式来存储数据的.约定表示方式的不同,造成了可以表示数的范围不同.其中,对于整数类型数据的表示,有unsigned integer(无符号整型)和signe ...

  5. win11 改键盘映射

    编辑注册表:按下win+r,输入regedit找到这个路径HKEY_LOCAL_MACHINE\ SYSTEM\ CurrentControlSet\ Control\ Keyboard Layout ...

  6. php echo print

    echo print都是语言结构,都不是函数,但echo没有返回值,print有. echo print

  7. Oracle.DataAccess使用问题汇总

    1.使用参数化传参 先看一段sql select TABLE_COLUMN_NAME from CSV_PARA_MAPPING where TABLE_NAME = ':v_tabName' and ...

  8. ariba 数据补发

    *&---------------------------------------------------------------------* *& Report Z_ARBA_PZ ...

  9. ubuntu22.04安装mysql5.7

    22版本的ubuntu默认安装mysql8.0版本,要想安装5.x的版本就得下载安装,这个比较详细的教程,可以参考: https://www.cnblogs.com/juanxincai/p/1648 ...

  10. promethus+grafana监控

    1.监控 MySQL (终端可以安装在任意主机,不一定按在mysql节点上,注:mysql版本需在5.5以上) I.首先在mysql中添加监控使用的用户: create user 'exp'@'%' ...