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/ ...
随机推荐
- C#中DataTable新增列、删除列、更改列名、交换列位置
一.新增列 1.1.新增列 /*新增列*/ dataTable.Columns.Add("列名称", Type.GetType("数据类型")); /*比如添加 ...
- 一 MySQL的架构与历史1.1--1.4
1.1 MySQL逻辑架构 最上层的服务并不是 MySQL 所独有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构.比如连接处理.授权认证.安全等等. 第二层架构是MySQL比较有意思的 ...
- docker 部署的mariadb数据库备份还原方案
docker部署下的mariadb数据库备份还原方案 背景:在使用docker部署的mariadb时,我们会将容器内的数据卷挂载到宿主机上,做简单的备份,容器在正常运行和停止的情况下,能快速创建mar ...
- Ingress限流
先说结论: ingress节点数量=n0 ingress限流配置 nginx.ingress.kubernetes.io/limit-rps: "n1" nginx.ingre ...
- windows下rabbitmq启动报错--distribution port 25672 in use by another node: rabbit@DESKTOP-LLPGVVE
最近公司有需求需要用到rabbitmq,因为之前习惯用的都是activemq,所以要临时学习一下,捣鼓这个rabbitmq.想着先在本地捣鼓测试一下,然后按照这个博主分享的安装方式进行安装. http ...
- 自定义jar包供ERP使用
功能要求:需要在ERP中调用其他web服务或者自身web服务(比如跨账套过账等) 1.编写java程序,并将程序打包成jar包 import org.apache.http.HttpEntity; i ...
- Node.js实现国密算法
一.node.js环境安装 1 去官网下载压缩包,并放置到/usr/local/bin文件夹下 2 进行环境变量配置 vim /etc/profile 在环境变量文件的末尾添加 export NODE ...
- 1.EditPlus
EditPlus软件使用 1.新建 XML 文件 2.编辑器设置 在文件保存时选择编码格式
- Nmap常见命令
一测试环境 靶机:metasploitable2-linux [下载地址] IP:192.168.88.128 攻击机: kali IP :192.168.88..131 二 Nmap命令 ...
- golang 解决 socket: too many open files, 以及 too many open files
同事写的一段代,码业务场景:需要多次GET请求一个三方服务的http 接口,获取数据后写入文件.发现有部分文件没有写入.查看日志出现了报错"socket: too many open fil ...