java实现AES/CBC/pack5padding加解密算法
最近要测试一个借口,借口的传值参数是使用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加解密算法的更多相关文章
- Java 使用AES/CBC/PKCS7Padding 加解密字符串
介于java 不支持PKCS7Padding,只支持PKCS5Padding 但是PKCS7Padding 和 PKCS5Padding 没有什么区别要实现在java端用PKCS7Padding填充, ...
- C++ 和 java 使用 AES CBC 128 加解密
Java 使用jce, code: import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax ...
- JAVA实现AES的加密和解密算法
原文 JAVA实现AES的加密和解密算法 import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import ja ...
- JAVA AES CBC PKCS5Padding加解密
package com.hzxc.groupactivity.util; /** * Created by hdwang on 2019/1/17. */ import org.slf4j.Logge ...
- AES CBC/CTR 加解密原理
So, lets look at how CBC works first. The following picture shows the encryption when using CBC (in ...
- eclipse JAVA实现AES的加密和解密算法
import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.Secre ...
- openssl:AES CBC PKCS5 加解密 (C/GOLANG)
#include <openssl/aes.h> /* AES_CBC_PKCS5_Encrypt * 入参: * src:明文 * srcLen:明文长度 * key:密钥 长度只能是1 ...
- python 实现 AES CBC模式加解密
AES加密方式有五种:ECB, CBC, CTR, CFB, OFB 从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现 python 在 Windows下使用AE ...
- java/php DES/CBC/PKCS5Padding加密解密算法实现过程
先看java代码 public static String encrypt(String message, String key) throws Exception { Cipher cipher = ...
- 手机号的 AES/CBC/PKCS7Padding 加解密
前言:接口中上次的手机号码和密码是传入的加密的,模拟自动化的时候也需要先对数据进行加密 1.各种语言实现 网上已经各种语言实现好的AES加密,可以点击查看:http://outofmemory.cn/ ...
随机推荐
- 关于htpasswd
什么是 htpasswd htpasswd是一个apache的内置工具,其生成的文件称之为htpasswd文件.htpasswd文件本身一个密码本,或者类似于数据库一样,用来存储一些密码(凭证)信息. ...
- 【笔记】GTK的bind函数的参数
自打用了cinnamon之后 无比想念gnome的扩展 虽然都是基于gjs的东西 但是gnome的插件在cinnamon上没有就很痛苦 这次修改了个插件 recents 记录历史打开的文件 想添加个功 ...
- 【记录】Linux Mint Cinnamon Desktop Enviroment使用记录
之前使用的系统是Kali Linux,并不是看上了一堆工具,工具的话上虚拟机不好吗,会折腾的docker更好阿,主要是 1. 用习惯了gnome的桌面环境 2. 开箱即用 很多配置他都已经做好了 我都 ...
- 我与CSP的一点小事
今天是20220311 见了YG老师,感觉被打了鸡血.然后想当初研一的时候,有了这篇LeetCode习题集 现在突然有了一点刺激之后,决定记录下这次的CSP经历,说无论怎么样是the shit,这次就 ...
- vs code for macOS的安装
参考下载链接:http://www.pc6.com/mac/147684.html 汉化方法: 中文设置方法(如下图)在插件设置的搜索栏中输入"chinese",选择第一个简体中文 ...
- 【小记】如果 golang 内存不够了怎么办
在看 redis 1.0 源码时,总会看到需要申请内存的地方,如果申请不到需要大的内存就会返回 NULL,然后在调用层抛出 oom. 比如 listDup 中在复制特殊 value 或者加入新节点时都 ...
- javascript【应用】debounce和throttle
debounce防抖 在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时:典型的案例就是输入搜索:输入结束后n秒才进行搜索请求,n秒内又输入的内容,就重新计时. <div id=& ...
- unity task
https://blog.csdn.net/weixin_43405845/article/details/105028291
- Vue基础(2)双向绑定
双向数据绑定 通过修改标签,例:切换radio.checkbox......都会对绑定的数据有影响 通过事件触发方法,修改data中数据,反向作用于radio.checkbox...... 1.v-m ...
- 2022-04-21内部群每日三题-清辉PMP
1.项目经理正在对比项目预算与行业指数,项目经理注意到项目总预算低于类似项目的估算.项目经理应该怎么做? A.更新风险登记册 B.调节资金限制 C.执行储备分析 D.请求专家判断 2.一个项目正在实施 ...