接口加密传输设计及AES加解密代码DEMO
接口加密传输设计及AES加解密代码DEMO
接口加密的方案设计:可以将请求的json字符串aes加密,通过params字段传输,
接口服务端接收到参数,先解密,然后转换成对象。
继续业务逻辑的处理。
(另外一种方案是:针对敏感字段aes加密,服务接收端对敏感字段来解密处理)
RequestVo对象:
private String params;
private String sign;
伪代码
String encrypt = requestVo.getParams();
RealReqVO realReqVO = new RealReqVO();
String decryptJson = decryt(encrypt,key);
//json转换为对象
realReqVO = JSON.parseObject(decryptJson,ReceiveReqVO.class);
log.info("数据接口(解密后),入参:{}", JSON.toJSONString(realReqVO));
if(StringUtils.isBlank(realReqVO.getSign())){
realReqVO.setSign(request.getSign());
}
//对sign简单处理是:能否aes解密成功~
validateSign(request.getSign(), key);
以下是AES加解密的DEMO
import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets; public class DesTest {
public static String decryt(String input, String key) {
byte[] output = null;
String res = "";
try {
SecretKeySpec skey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skey);
output = cipher.doFinal(Base64.decodeBase64(input.getBytes()));
return new String(output,StandardCharsets.UTF_8);
} catch (Exception e) {
e.printStackTrace();
}
return "";
} public static String encrypt(String input, String key) {
String res = "";
try {
SecretKeySpec skey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skey);
byte[] output = cipher.doFinal(input.getBytes());
res = Base64.encodeBase64String(output);
} catch (Exception e) {
e.printStackTrace();
}
return res;
} public static void main(String[] args) throws Exception {
//Input length must be multiple of 16 when decrypting with padded cipher
//AES解密报错,Input length must be multiple of 16 when decrypting with padded cipher
//加密方案及AES加密,需要同一个key。 或者是AES密文被修改,无法解密。
//AES解密报错,Input length must be multiple of 16 when decrypting with padded cipher
//具体解决就是:在解密前再转一次编码,基本就能解决这一报错问题。
//原因分析:前端enCode在后端解析失败,最后的%3D无法解析,导致偏移向量对应不上,报错
//String un="8RKHWcE11foCm2%2BaEuFG6w%3D%3D";
//String pd="TQafftXrh8aXYNFJcPgw1w%3D%3D";
//先转编码!!!
//String ufUserName = URLDecoder.decode(un, "UTF-8");
//String ufPassWord = URLDecoder.decode(pd, "UTF-8");
//此时里面的%3D 解析成了=
//8RKHWcE11foCm2%2BaEuFG6w==
//TQafftXrh8aXYNFJcPgw1w==
//然后再去解密 //Invalid AES key length: 7 bytes
String key = "testKeytestKeytestKeytestKey1234"; //32位长度 String content = "{10086}";
String encrypt = encrypt(content, key);
System.out.println("encrypt=" + encrypt);
String decrypt = decryt(encrypt, key);
System.out.println("decrypt=" + decrypt);
} }
接口加密传输设计及AES加解密代码DEMO的更多相关文章
- 数据採集器服务——Socket(今天才发现AES加解密代码跟贴的时候不一样,貌似乱码,不知什么情况)
近期刚做的一个项目.关于 Socket TCP 通信. 需求方提供了一个 ARM 机器,及数据採集器,须要我做一个服务端与数据採集器进行交互. 目的: 数据採集器:定时将读取到的数据发送到服务端. 服 ...
- .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转
.net mvc 站点自带简易SSL加密传输 因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...
- 学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密
学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密 技术标签: RSA AES RSA AES 混合加密 整合 前言: 为了提高安全性采用了RS ...
- DES,AeS加解密,MD5,SHA加密
1.DES一共就有4个参数参与运作:明文.密文.密钥.向量.其中这4者的关系可以理解为: 密文=明文+密钥+向量: 明文=密文-密钥-向量: 为什么要向量这个参数呢?因为如果有一篇文章,有几个词重复, ...
- cryptoJS AES 加解密简单使用
简单记录一下,前端利用 cryptoJS 如何加解密的.主要是关于 AES 加解密. 需求描述:需要对 url 中的参数进行 AES 解密,然后再把该参数进行 MD5 加密通过接口传递. AES AE ...
- 基于FPGA的AES加解密IP
Programmable AES Encryption/ Decryption IP 可编程AES加解密IP 可编程AES加解密IP提供了加解密算法功能,兼容美国国家标准与技术研究院(NIST)发布的 ...
- 收银台数据库存储AES加解密
高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合.缺点是密钥的传输 ...
- AES加解密算法在Android中的应用及Android4.2以上版本调用问题
from://http://blog.csdn.net/xinzheng_wang/article/details/9159969 AES加解密算法在Android中的应用及Android4.2以上 ...
- [转帖]前端 crypto-js aes 加解密
前端 crypto-js aes 加解密 2018.04.13 11:37:21字数 891阅读 59767 https://www.jianshu.com/p/a47477e8126a 原来前端也有 ...
- RSA,AES加解密算法的实现
目录 Python实现RSA公钥加密算法 RSA公钥加密算法原理 RSA算法的Python实现 AES加解密算法实现 AES加解密算法原理 AES加解密算法Python实现 参考文献 Python实现 ...
随机推荐
- 涨姿势 | 一文读懂备受大厂青睐的ClickHouse高性能列存核心原理
简介: 本文尝试解读ClickHouse存储层的设计与实现,剖析它的性能奥妙 作者:和君 引言 ClickHouse是近年来备受关注的开源列式数据库,主要用于数据分析(OLAP)领域.目前国内各个大厂 ...
- SchedulerX 如何帮助用户解决分布式任务调度难题?
简介:本文分别对任务调度平台的资源定义.可视化管控能力.分布式批处理能力进行了简述,并基于 SchedulerX 的能力结合实际业务场景提供了一些基础参考案例.希望通过上述内容能让大家方便地熟悉任务 ...
- 博时基金基于 RocketMQ 的互联网开放平台 Matrix 架构实践
简介: Matrix 经过一年多的建设,目前已具备多渠道统一接入.第三方生态互联互通.基金特色交易场景化封装等功能特性.Matrix 通过建设有品质.有温度的陪伴,从技术上和体验上,让用户理解风险,理 ...
- RDS PostgreSQL一键大版本升级技术解密
简介: 内容简要: 一.PostgreSQL行业位置 二.PostgreSQL版本升级背景 三.PostgreSQL版本升级解密 四.PostgreSQL版本升级成果 一.PostgreSQL行业位 ...
- [FAQ] 部署二进制运行时 go-ego/gse 如何正确加载分词字典
运行Golang编译后二进制运行时,此时运行二进制时所在目录就是Golang源码程序认为的根目录了. 所以只需要把字典文件拷贝到与二进制所在同一目录内,然后使用 seg.LoadDict('dicti ...
- [FE] yarn, npm 切换镜像源
yarn 设置命令如下,会修改 ~/.yarnrc 内容. $ yarn config set registry https://registry.yarnpkg.com npm 设置命令如下,会修改 ...
- dotnet 8 WPF 支持在 RDP 远程桌面状态下启用渲染硬件加速
本文将和大家介绍在 dotnet 8 里 WPF 引入的新功能之一,在 RDP 远程桌面状态下启用渲染硬件加速 在 dotnet 8 之前,在用户进行 RDP 远程桌面时 WPF 应用将默认关闭硬件渲 ...
- WPF 已知问题 dotnet 6 设置 InvariantGlobalization 之后将丢失默认绑定转换导致 XAML 抛出异常
在设置了 InvariantGlobalization 为 true 之后,将会发现原本能正常工作的 XAML 可能就会抛出异常.本文将告诉大家此问题的原因 这是有开发者在 WPF 仓库上给我报告的 ...
- oracle RDBMS Kernel Executable 占用内存过高
oracle RDBMS Kernel Executable 占用内存过高 参考:https://www.cnblogs.com/markkang/archive/2019/11/25/1192540 ...
- vue+js实现点击图片,图片放大
1.首先在template中插入image,并赋予点击事件(这个时候是小图) <template> <div> <img src="@/assets/image ...