最近要测试一个借口,借口的传值参数是使用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. ts(typescript)讲解for , for...in..., for...of..., while, every, some, map, filter

    for  一般用于已知循环次数 var num:number = 5; var i:number; var factorial = 1; for(i = num;i>=1;i--) { fact ...

  2. [.Net] 【笔记】基于.NET平台常用的框架整理(转载,侵删)

    分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度. Redis:是一个高性能的K ...

  3. 一、mysql基础

    说明:学习视频参考尚硅谷--康师傅 第一章.数据库概述 1.为什么使用数据库?why? 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应用,数 ...

  4. R语言广义线性模型(GLM)、全子集回归模型选择、检验分析全国风向气候数据|附代码数据

    全文链接:http://tecdat.cn/?p=30914 最近我们被客户要求撰写关于广义线性模型(GLM)的研究报告,包括一些图形和统计输出. 我们正和一位朋友讨论如何在R软件中用GLM模型处理全 ...

  5. 扩linux 主分区 xfs 格式的

    在centos8 上 扩主分区 # 扩系统盘,第一个分区 growpart /dev/vda 1 #后面加挂接点 一般是 / xfs_growfs  / # 查看 df -h

  6. PyTables 教程(三) 执行撤消/重做功能,使用枚举类型,表中的嵌套结构

    翻译自http://www.pytables.org/usersguide/tutorials.html 执行撤消/重做功能 PyTables 支持撤销/重做功能,此功能可让您将标记放置在层次结构操作 ...

  7. PyTables 教程(二)多维表单元格和自动健全性检查,使用链接更方便地访问节点

    翻译自http://www.pytables.org/usersguide/tutorials.html 多维表单元格和自动健全性检查 现在是一个更真实的例子(即代码中有错误)的时候了.我们将创建两个 ...

  8. Python用telnet设置,抓UDP抓采样点并显示

    ====main.bat==== echo off rem "d:\Program\WiresharkPortable64\App\Wireshark\tshark.exe" -- ...

  9. taobao.tbk.sc.newuser.order.get( 淘宝客-服务商-新用户订单明细查询 )

    淘宝客订单表结构设计(mysql) CREATE TABLE `tbk_order` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `member_id` bi ...

  10. centos7 双网卡同网段双网关配置

    需求: #1.服务器为双网卡: #2.网卡1为互联网 172.16.137.99/24/254 #3.网卡2为旅游专网 172.16.137.97/24/1 #4.互联网路由器为172.16.137. ...