优雅的处理 API 接口敏感数据加解密(方案详解)

全网最全之接口测试【加密解密攻防完整版】实战教程详解 对称加密算法是共享密钥加密算法,在加密解密过程中,使用的密钥只有一个。发送和接收双方事先都知道加密的密钥,均使用这个密钥对数据进行加密和解密。 数据加密:在对称加密算法中,数据发送方将明文 (原始数据) 和 加密密钥一起经过加密处理,生成复杂的密文进行发送。 数据解密:数据接收方收到密文后,使用加密的密钥及相同算法的逆算法对加密的密文进行解密,将使其恢复成可读明文。 阅读详情

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 

71ee62ad3201e3a4db3318b40b3f963f.gif

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号、CRM 等等功能:

  • Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • Cloud 仓库:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本 

来源:juejin.cn/post/
7358368402795692082


一、背景与目标

随着网络技术的快速发展,数据安全问题日益突出。为了防止爬虫、防请求篡改、防请求重放,以及验证数据完整性,本方案结合HTTPS原理和微信支付加解密设计,通过对称加密、非对称加密、签名等技术,为API接口提供加解密设计和落地。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

二、方案设计

对称加密、非对称加密、哈希算法、验签算法

  • 对称加密: 采用相同的密钥进行加密和解密。具有加密速度快、计算量小的优点,但密钥的安全传输是问题。在本方案中,对称加密主要用于数据的实际加密传输。

  • 非对称加密: 使用一对密钥(公钥和私钥)进行加密和解密。公钥用于加密数据,私钥用于解密数据。非对称加密可以确保密钥的安全传输,但加密速度较慢,不适合长文本加密。在本方案中,非对称加密主要用于对称密钥的加密。

  • 哈希算法: 无论用户输入什么长度的原始数据,经过计算后输出的密文都是固定长度的,只要原数据稍有改变,输出的“摘要”便完全不同

  • 签名算法: 一般指的是,通过私钥对数据进行签名,然后通过公钥对数据进行验签

HTTPS原理概述

HTTPS(Hypertext Transfer Protocol Secure)是一种通过计算机网络进行安全通信的传输协议。它利用SSL/TLS协议在HTTP应用层进行通信加密,通过证书进行身份验证,从而确保数据传输的安全性和完整性。

cf6ad235ff2c05e07af0318577a235b8.jpeg

微信支付加解密原理

  • 请求签名: 通过商户API证书私钥,对每一次请求进行RSA-SHA256签名,微信支付进行验签

  • 回调验签: 微信支付通过平台证书私钥,对每一次回调进行RSA-SHA256签名,商户接收到请求后,通过平台正式公钥进行验签

  • 回调解密: 商户根据配置的apiV3密钥,对加密数据进行AES-256-GCM解密

01cee5130d84c9f23d05b5ff4e1363ba.jpeg

接口加解密设计思路

  • 密钥交换: 客户端使用服务端的公钥对对称加密的密钥进行加密,然后将密文密钥发送给服务端。服务端使用自己的私钥解密得到对称加密的明文密钥。

  • 数据加密: 客户端使用对称加密的明文密钥对接口数据进行加密,然后发送给服务端。服务端使用相同的对称加密密钥对数据进行解密。

  • 数据哈希(签名): 在数据发送前,客户端计算数据的哈希值,并将哈希值作为数据的一部分发送给服务端。服务端收到数据后,使用相同的算法计算哈希值,并与客户端发送的哈希值进行比较,以验证数据的完整性。

  • 数据有效性校验: 在数据发送前,客户端将当前时间作为数据的一部分发送给服务端。服务端收到数据后,解密得到参数中的时间,并与服务端当前时间进行比较,以验证请求是否过期,防止请求重放。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

三、技术实现

1、密钥生成与管理:

通过工具生成非对称密钥对,服务端负责保管私钥。(客户端也可以定期从服务端获取公钥(传输过程中有泄露的风险),并保存到LocalStorage。)

2、加密算法选择:

对称加密算法可选用常用的AES,非对称加密算法可选用常用的RSA。哈希算法可选用SHA-256、MD5,签名算法可选用RSA-SHA256等。根据Hutool加密算法如下:

// 对称密钥
String key = "key";
AES aes = SecureUtil.aes(key.getBytes());
// 加密
String ciphertext = aes.encryptBase64(content);
// 解密
String result = aes.decryptStr(ciphertext);
// 非对称公钥
String publicKey = "xxxxxxx";
// 对称密钥
String key = "key";
RSA rsa = new RSA(null, publicKey);
// 对对称密钥进行加密
String ciphertextKey = rsa.encryptBase64(key, KeyType.PublicKey);


// 非对称私钥
String privateKey = "xxxxxxx";
RSA rsa2 = new RSA(privateKey, null);
// 对加密的对称密钥进行解密
String key = rsa2.encryptBase64(ciphertextKey, KeyType.PrivateKey);
String data = "测试";
Digester sha256 = new Digester(DigestAlgorithm.SHA256);

System.out.println(sha256.digestHex(data));
// 暂不考虑
String publicKey = "xxxxx";
String privateKey = "xxxxx";
String data = "测试";

Sign privateSign = SecureUtil.sign(SignAlgorithm.SHA256withRSA, privateKey, null);
String sign = new String(Base64.getEncoder().encode(privateSign.sign(data)));
System.out.println("签名:" + sign);

Sign publicSign = SecureUtil.sign(SignAlgorithm.SHA256withRSA, null, publicKey);
System.out.println(publicSign.verify(data.getBytes(), Base64.getDecoder().decode(sign.getBytes())));
3、签名规则:

等queryString和body参数加密后,将queryString、时间戳、明文对称密钥、body参数按顺序进行拼接,然后通过SHA256算法进行哈希得到签名sign,然后将sign放在header中进行传递

4、参数传递:
  • ek(encryt-key): xxxxxxx(非对称加密后的对称密钥)

  • ts: xxxxxxx(时间戳)

  • sign: xxxxxxx

将请求参数queryString拼成"param1=value1&param2=value2"格式

将queryString进行对称加密,得到"ciphertext=xxxxx",并重新拼接到url后面

query参数可以参考GET请求

body参数可以通过对称加密得到base64密文,直接用body进行传输

例如:

url?ciphertext=xxxxx
body:xxxxxxxx
5、后端处理:
  1. 请求有效验证: 获取header中ts参数,得到时间戳并判断时间戳是否超过一定时间;

  2. 解密对称密钥: 通过私钥解密header中的ek参数,得到明文的对称密钥key;

  3. 验签: 将queryString、时间戳、明文对称密钥、body参数按顺序进行拼接,然后通过SHA256算法进行哈希得到签名sign,与header中的sign做比较;

  4. 解密参数: 通过明文对称密钥,分别解密queryString、body参数;

  5. 加密响应结果: 请求完成后,将响应结果通过对称加密得到base64密文,并返回给客户端

四、常见问题

Q:为什么需要参考HTTPS来设计接口加解密?

A:HTTPS结合了对称加密和非对称加密,安全性更高,同时也能满足效率要求

Q:如果只使用对称加密有什么问题?

A:客户端是不安全的,很容易暴露密钥,只要一旦暴露,加密就形同虚设

Q:如果只使用非对称加密有什么问题?

A:

  • 非对称加密不支持超长文本加密(RSA只支持117字节);

  • 非对称加密效率太慢

Q:接口参数已经加密了,是否还有必要签名?

A:有必要,生产环境不是每一个接口都需要加密的。但是每一个接口都需要防篡改、防重放

Q:签名算法为什么没有采用RSA-SHA256?

A:

  • RSA-SHA256签名算法只能私钥签名,公钥验签。

  • 客户端存的是公钥,如果要采用该算法,需要再定义一套非对称密钥,加重了维护成本。

  • 现在采用哈希算法SHA256进行模拟签名,其中混入了明文的对称密钥,也可以防止模拟签名

Q:用了对称和非对称混合加密,非对称公钥保存在客户端,还是有可能泄露,怎么保证安全?

A:

  • 前端代码压缩、混淆;

  • 公钥不要直接写到代码里,分段、加密保存;

  • 即使公钥暴露了,对称密钥每次都是新生成的,抓包也拿不到本次请求的对称密钥,也就没有办法对结果解密

Q:对称和非对称同时使用的话,怎么保证加解密的效率?

A:请求参数和响应结果实际还是通过对称加密,非对称只会对对称密钥进行加解密,所以效率和对称加密差不多4

Q:该方案是否是绝对安全?如果不是,是否有绝对安全的加解密方案?

A:

  • 不是,如果客户端被破解了,用户可以模拟客户端发起请求

  • 暂时没有,客户端对于互联网都是透明的,只要客户端被破解了,都可以模拟客户端发起请求

五、安全性分析

本方案结合对称加密和非对称加密的优点,既保证了数据传输的安全性,又提高了加密解密的效率。但是需要考虑客户端公钥的安全性。

防篡改: 请求参数都进行了签名,只要客户端公钥不泄露,无法修改请求参数;

防爬虫: 请求参数进行了签名和加密,无法模拟客户端请求;响应结果进行了加密,即使抓包拿到了结果,也无法进行解密

防重放: 请求头中引入时间戳,并且时间戳也进行了验签,可以防止篡改,每次服务端接收到请求都会验证时间戳的有效性。(短时间内的重放暂时阻止不了,可以考虑在后端在缓存进行验证,但目前业务用不上)


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,“长按”或“扫描”下方二维码噢:

9e997ce6410add985072342557b5a47e.png

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

279368b7df9040b0997431a5f1d60de0.png

6ed69992942755e22a730cf3c2879158.png914a239c96ef0ee605dce62500af10dc.png2f65826c90c531859de8c5f9ee9ef877.png8cf08a64ad53eeacc7badfdb3a6aa6b1.png

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
从入门到精通:接口自动化测试中加密、解密和Sign签名的完整指南 在进行接口自动化测试时,加密、解密和sign签名是非常重要的步骤。这些过程可以保证传输的数据安全性,并防止恶意攻击。下面将介绍如何使用Python实现接口自动化测试中的加密、解密和sign签名。 阅读详情

相关推荐

API敏感数据加解密:Spring Boot注解式实现与密钥安全管理

数据加密是信息安全领域的核心概念,旨在通过密码学算法将明文转换为不可读的密文,确保数据在传输和存储过程中的机密性。其原理主要基于对称加密(如AES)和非对称加密(如RSA)两类算法,对称加密速度快,适合处理大量数据,而非对称加密解决了密钥分发难题。在技术价值上,数据加密不仅是满足合规要求(如GDPR、等保2.0)的关键,更是构建用户信任、防止数据泄露的工程基石。在应用场景中,尤其在微服务架构和API接口交互中,如何对手机号、身份证号等敏感字段进行高效、透明的加解密成为高频需求。本文聚焦于API敏感数据保护,

weixin_34293911的博客 420

API接口加解密技术方案(参考HTTPS原理和微信支付)

为了防止爬虫、防请求篡改、防请求重放,以及验证数据完整性,本方案结合HTTPS原理和微信支付加解密设计,通过对称加密、非对称加密、签名等技术,为API接口提供加解密设计和落地

ajiong的博客 3135

SORT算法在遮挡下总跟丢?深入OC-SORT源码,拆解其三大创新点如何解决卡尔曼滤波的顽疾

本文深入解析OC-SORT算法如何通过三大创新点解决多目标跟踪中的卡尔曼滤波顽疾。OC-SORT引入在线平滑虚拟轨迹技术(OOS)、观测中心动量匹配机制(OCM)和基于最后观测的轨迹恢复(OCR),显著提升了遮挡场景下的跟踪性能。实验数据显示,相比传统SORT算法,OC-SORT在MOT17数据集上MOTA提升5.7%,遮挡恢复成功率提高64.2%,为Multi-Object Tracking领域带来突破性进展。

weixin_42547431的博客 240

Api接口加解密

接口加解密是确保数据安全的关键技术之一,其通过对传输中的数据进行加密来防止数据在传递过程中被拦截、篡改或伪造。但是,单靠加解密技术并不足以应对所有安全挑战。必须整合多种安全策略,建立一个全方位的安全防护体系,以确保接口的全面安全。

丿微风乍起的博客 886

CH340以及CH系列USB转串口驱动下载

在之前使用USB转串口时,很多时候大家可能会不知道去哪下载驱动,然后百度随便下载一个,但往往鱼龙混杂且版本不一,所以今天特意整理一下CH340驱动以及CH系列的官方驱动下载地址,方便大家进行下载也方便自己后期查找,所有链接皆指向官方下载链接,每次下载都可获取官方当前最新驱动。 CH340/CH341 Windows驱动下载链接:CH341SER.EXE下载链接 Linux驱动下载链接:CH341SER_LINUX.ZIP下载链接 Andr...

OIDCAT的博客 4万+

Windows Pychram部署Unet++过程

windows系统 在pycharm平台上配置并跑通Unet网络 这里我用的是B站课程里的资源《唐宇迪Unet图像分割语义分割实战》

ArcGis_Niu的博客 803

SpringBoot 快速实现 api 接口加解密

该项目使用RSA加密方式对API接口返回的数据加密,让API数据更加安全。别人无法对提供的数据进行破解。Spring Boot接口加密,可以对返回值、参数值通过注解的方式自动加解密。首先我们当然是了解RSA加密RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。

lujiawei00的专栏 2867

一种解决STM32多串口同时收发的方法

在做项目中,遇到了同时调用串口通信时程序崩溃的问题,在项目中,串口1用作调试串口,串口2用作MQTT通信串口,串口3用作下位机通信串口, 串口1重定向以后,用库函数自带的printf函数打印字符串 串口2使用自己写的u2_printf函数,即va_list这套变参宏定义后使用vsprintf函数打印字符串 串口3刚开始使用串口2一样的打印方式,程序在调试调用到串口3打印函数时直接崩溃,后续将串口3改用dma转存输出,仍然无法正常调用 多次研究以后,采用三个串口都使用重定向后的库函数自带的printf

Zxp0605的博客 8796

优雅的处理API 接口敏感数据加密解密

优雅的处理API 接口敏感数据加密解密 前言 最近遇到了很多网站爬取和反爬取的问题,所以在此分享一种简单的 api 接口加密策略。 我们与客户端的接口交互过程中,为了更高的安全性,防止数据被其他人抓取,可能需要对部分接口进行加密(请求参数加密,服务端解密)、返回信息加密(服务端加密,客户端解密),但也不是所有的接口都这样,有些接口可能不需要,所以我们可以使用注解的方式来轻松达到此要求。 完成代码已发布至 github:https://github.com/wiltonicp/vihacker-cloud

Ranger的博客 3255

《中国图书馆图书分类法》(第五版)详表(中图分类号查询表)

中文法分类

记录我目之所及的世界 4万+

HBV模型

据说mHM模型也是基于HBV模型原理。 网上不同版本的HBV模型稍有差别 def hbv_main(n_days, params, air_temp, prec, dpem): #n_days 模拟天数 #air_temp 每月温度 #prec 降水 #dpem 每月蒸发 Tsnow_thresh = 0.0 ca = 410. # Initialize arrays for the simiulation snow = np.zeros(air_temp.size

m0_46268055的博客 2330

DSB Security 如何优雅的进行敏感数据的传输?

DSB Security 如何优雅的进行敏感数据的传输? 对于项目中的敏感数据处理,很多同学刚开始接触的时候,往往觉得比较繁琐,项目中实现的方式也是千奇百怪,基本就是百度搜索和粘贴。 对于敏感数据的处理,是任何一家互联网公司必须要注重的事情,用户的敏感信息泄露带来的危害也是十分严重的。在下不才,结合多年积累,整理了一款开箱即用的加解密解决方案,大致功能如下: RSA 加解密,支持分段加密,解决加密文本超长的问题 DES 加解密,支持多种模式 EBC、CBC(分组加密、迭代分组加密),增加盐混淆策略,避

架构探险之道 1625

RML2018.01a数据集的读取与使用

基于深度学习的自动调制识别

QAQIknow的博客 1万+

SpringBoot接口加解密实战:如何用注解优雅保护你的API(附完整代码)

本文详细介绍了如何在SpringBoot项目中通过自定义注解实现API接口的优雅加解密保护。文章提供了完整的代码示例,包括过滤器、拦截器和自定义注解的实现,帮助开发者在不污染业务代码的前提下,实现选择性加密和多协议支持,有效提升接口安全性。

weixin_30300225的博客 385

如何让 Mac mini 24小时不休眠运行 OpenClaw

如果 OpenClaw 每 5-10 分钟自动退出,launchd 连续 4 次快速重启后会判定为崩溃循环并卸载服务。:方案一(pmset)+ 方案三(launchd)组合使用,既防止系统休眠,又保证 OpenClaw 开机自启和崩溃自动恢复。:caffeinate 只在进程运行期间有效,终端关闭或进程结束后系统恢复正常睡眠策略。这条命令会自动创建 launchd plist 并启用服务,是最推荐的方式。替换为你的实际用户名路径,Node.js 路径也要改成你自己的。确保 plist 中有。

Maynor的博客 2204

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

优雅的API接口

优雅的API接口

asas043的专栏 289

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Spring Boot接口加解密实战:混合加密方案与工程实现详解

在Web应用开发中,数据传输安全是保障业务机密性与用户隐私的核心环节。其基本原理在于通过加密算法将明文数据转换为密文,确保即使数据在传输过程中被截获,也无法被未授权方解读。从技术价值看,这不仅是满足等保合规的刚需,更是构建可信应用架构、防范中间人攻击与数据泄露风险的关键工程实践。常见的应用场景包括用户登录认证、支付交易、敏感信息查询等涉及个人身份与金融数据的接口交互。本文聚焦于Spring Boot项目,深入探讨如何通过RSA与AES相结合的混合加密机制,实现请求与响应全链路的业务数据安全防护,并涵盖密钥管

weixin_30314813的博客 412

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

WEB开发之敏感数据处理(一) - JPA敏感数据自动加解密

Converter定义一个实现JPA的entity值转换为数据库值,可实现加密逻辑将数据库值转换为entity值,可实现解密@Converter@Override// TODO: 2023/5/30 加密逻辑@Override// TODO: 2023/5/30 解密逻辑定义一个User实体,通过注解的需要加密的属性。在JPA入库时会自动调用方法,在这个方法内实现加密逻辑在JPA查询时会自动调用方法,可以实现解密逻辑@Getter@Setter@Entity@Id。

akaiyijian001的博客 1460

优雅API接口设计

java API接口

IT蜗牛的专栏 407

瞧瞧别人家的API接口,那叫一个优雅

们需要经常跟第三方平台打交道,可能会对接第三方平台API接口,或者提供API接口给第三方平台调用。那么问题来了,如果设计一个优雅的API接口,能够满足:安全性、可重复调用、稳定性、好定位问题等多方面需求?今天跟大家一起聊聊设计API接口时,需要注意的一些地方,希望对你会有所帮助。

欢迎来到爱吃熊掌的鱼的博客 1073
上一篇: 19.2k star,三分钟实现一套 Web 版的 Excel 组件,这个开源工具强的离谱!
下一篇: 一款整洁、开源、专属程序员的 Web 笔记应用
公众号-芋道源码
博客等级 码龄10年 1631粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值