Api接口加密策略

2023-09-21 10:53:50

接口安全要求:

1.防伪装攻击(案例:在公共网络环境中,第三方 有意或恶意 的调用我们的接口)

2.防篡改攻击(案例:在公共网络环境中,请求头/查询字符串/内容 在传输过程被修改)

3.防重放攻击(案例:在公共网络环境中,请求被截获,稍后被重放或多次重放)

4.防数据信息泄漏(案例:截获用户登录请求,截获到账号、密码等)

设计原则:

1.轻量级

2.适合于异构系统(跨操作系统、多语言简易实现)

3.易于开发

4.易于测试

5.易于部署

6.满足接口安全需求(满足接口安全1,2,3),无过度设计。

其它:接口安全要求防数据信息泄漏部分,主要针对目前用户中心的登录接口

设计原则是:使用HTTPS安全协议 或 传输内容使用非对称加密,目前我们采用的后者。

适用范围:

1.所有写操作接口(增、删、改 操作)

2.非公开的读接口(如:涉密/敏感/隐私 等信息)

接口参数签名 实现思路参考:

必要的输入参数:

签名算法过程:

1.对除签名外的所有请求参数按key做的升序排列,value无需编码。 (假设当前时间的时间戳是12345678)

例如:有c=3,b=2,a=1 三个参,另加上时间戳后, 按key排序后为:a=1,b=2,c=3,_timestamp=12345678。

2 把参数名和参数值连接成字符串,得到拼装字符:a1b2c3_timestamp12345678

3 用申请到的appkey 连接到接拼装字符串头部和尾部,然后进行32位MD5加密,最后将到得MD5加密摘要转化成大写。

示例:假设appkey=test,md5(testa1b2c3_timestamp12345678test),取得MD5摘要值 C5F3EB5D7DC2748AED89E90AF00081E6 。

常见的加密方式:

DES加密算法: DES加密算法是一种分组密码,以64位为分组对数据加密,它的密钥长度是56位,加密解密用同一算法。DES加密算法是对密钥进行保密,而公开算法,包括加密和解密算法。这样,只有掌握了和发送方相同密钥的人才能解读由DES加密算法加密的密文数据。因此,破译DES加密算法实际上就是搜索密钥的编码。对于56位长度的密钥来说,如果用穷举法来进行搜索的话,其运算次数为256。

随着计算机系统能力的不断发展,DES的安全性比它刚出现时会弱得多,然而从非关键性质的实际出发,仍可以认为它是足够的。不过,DES现在仅用于旧系统的鉴定,而更多地选择新的加密标准。

AES加密算法: ES加密算法是密码学中的高级加密标准,该加密算法采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。这种加密算法是美国联邦政府采用的区块加密标准,这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。

AES加密算法被设计为支持128/192/256位(/32=nb)数据块大小(即分组长度);支持128/192/256位(/32=nk)密码长度,,在10进制里,对应34×1038、62×1057、1.1×1077个密钥。

RSA加密算法: RSA加密算法是目前最有影响力的公钥加密算法,并且被普遍认为是目前最优秀的公钥方案之一。RSA是第一个能同时用于加密和数宇签名的算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA加密算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

Base64加密算法: Base64加密算法是网络上最常见的用于传输8bit字节代码的编码方式之一,Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在JAVAPERSISTENCE系统HIBEMATE中,采用了Base64来将一个较长的唯一标识符编码为一个字符串,用作HTTP表单和HTTPGETURL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。

MD5加密算法: MD5为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。对MD5加密算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成—个128位散列值。

MD5被广泛用于各种软件的密码认证和钥匙识别上。MD5用的是哈希函数,它的典型应用是对一段信息产生信息摘要,以防止被篡改。MD5的典型应用是对一段Message产生fingerprin指纹,以防止被“篡改”。如果再有—个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。MD5还广泛用于操作系统的登陆认证上,如UNIX、各类BSD系统登录密码、数字签名等诸多方

总结:

1、接口调用方和接口提供方约定好统一的参数加密算法

2、接口调用方在调用时把加密后的_sign放在参数中去请求接口

3、接口提供方接到响应后,判断时间戳是不是在有效时间内(这个时间间隔根据你的安全范围可以是10分钟,5分钟,20秒等,过期失效,前提是需要保证接口提供方和调用方的服务器时间为准确的网络同步时间)

4、把参数中除了_sign以外的参数进行加密,然后把加密结果和传过来的_sign比较,相同则执行调用请求。

5、如果服务器和客户端的时间没有同步,可以返回错误的同时候在返回一个服务器的当前时间,客户端接收到该错误后再请求上一个接口,时间则传服务器刚刚返回的时间 6、如果用户还没有登录时,还没有token之类的唯一标识时,可以和服务端定义一个固定的标识来使用就行。 7、涉及到比较重要的信息,可以用AES对value进行加密,防止抓包拉取到上传的数据。 8、追求安全可以考虑https的双向验证模式 + 参数的sign签名的规则双重验证达到安全的请求后台。

更多推荐

Minitab Express for Mac(数据分析软件)附破解补丁 v1.5.0 支持M1

MinitabExpress是一款专为Mac用户设计的数据分析和统计软件。它提供了一套全面的工具和功能,用于分析数据、执行统计计算和生成可视化。下载:MinitabExpressforMac(数据分析软件)附破解补丁以下是MinitabExpressforMac的一些主要功能:1.数据导入和操作:MinitabExpr

Xilinx FPGA未使用管脚上下拉状态配置(ISE和Vivado环境)

文章目录ISE开发环境Vivado开发环境方式1:XDC文件约束方式2:生成选项配置ISE开发环境ISE开发环境,可在如下Bit流文件生成选项中配置。右键点击GenerateProgrammingFile,选择ProcessProperties,在弹出的窗口选择ConfigurationOptions->UnusedP

排序算法-插入排序

属性当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与array[i1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移直接插入排序的特性总结:1.元素集合越接近有序

redis的基础底层篇 zset的详解

一zset的作用以及结构1.1zset作用redis的zset是一个有序的集合,和普通集合set非常相似,是一个没有重复元素的字符串集合。常用作排行榜等功能,以用户id为value,关注时间或者分数作为score进行排序。1.2zset的底层结构1.zset是一个特别的数据结构,一方面它等价于Java的数据结构Map<

Layui快速入门之第十节 表单

目录一:基本用法二:输入框普通输入框输入框点缀前置和后置前缀和后缀动态点缀密码显隐内容清除自定义动态点缀点缀事件三:复选框默认风格标签风格开关风格复选框事件四:单选框普通单选框自定义标题模板单选框事件五:选择框普通选择框分组选择框搜索选择框选择框事件六:表单相关操作API属性渲染常规渲染定向渲染2.7+忽略渲染验证自定

理清SpringBoot CURD处理逻辑、顺序

💗wei_shuo的个人主页💫wei_shuo的学习社区🌐HelloWorld!理清SpringBootCURD处理逻辑、顺序Controller(控制器):控制器接收来自客户端的请求,并负责处理请求的路由和参数解析。控制器通常会调用相应的服务层方法来处理业务逻辑,并将结果返回给客户端。Service(服务层):

keepalived高可用学习 keepalived+nginx高可用负载均衡配置

文章目录Keepalived1、概述2、配置文件说明3、简洁版配置过程4、keepalived+lvs配置5、主lvs不可用可能性6、防止脑裂,解决方式7、keepalived的配置补充keepalived+nginx高可用配置nginx的负载均衡nginx遇到的问题之负载均衡后获取客户端IPnginx配置中upstr

Spring整合RabbitMQ

一、步骤生产者①创建生产者工程②添加依赖③配置整合④编写代码发送消息消费者①创建消费者工程②添加依赖③配置整合④编写消息监听器二、代码生产者工程1.在生产者工程和消费者工程中都导入如下依赖<dependencies><dependency><groupId>org.springframework</groupId><a

单片机C语言实例:32、实用密码锁

程序实例1:延时函数#ifndef__DELAY_H__#define__DELAY_H__/*------------------------------------------------uS延时函数,含有输入参数unsignedchart,无返回值unsignedchar是定义无符号字符变量,其值的范围是0~25

【2023】数据挖掘课程设计:基于TF-IDF的文本分类

目录一、课程设计题目基于TF-IDF的文本分类二、课程设计设置1.操作系统2.IDE3.python4.相关的库三、课程设计目标1.掌握数据预处理的方法,对训练集数据进行预处理;2.掌握文本分类建模的方法,对语料库的文档进行建模;3.掌握分类算法的原理,基于有监督的机器学习方法,训练文本分类器。四、课程设计内容1.数据

【LeetCode-中等题】347. 前 K 个高频元素

文章目录题目方法一:优先队列(基于大顶堆实现)方法二:优先队列(基于小顶堆实现,队列只需维护k个元素)题目方法一:优先队列(基于大顶堆实现)PriorityQueue<int[]>queue=newPriorityQueue<>((a,b)->b[1]-a[1]);优先队列按照队列中的数组的第二个元素从大到小排序((a

热文推荐