接口安全--http数字签名

2024-06-10 23:08

本文主要是介绍接口安全--http数字签名,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为了保证http请求数据的安全性和防篡改性。我们通常要对请求参数进行一些加密。
加密规则可以根据双方接口协商定义。这里举一个常用的加密协议例子。

1. sign加密协议

接口协议中通常会提供一个 appKey作为唯一的标识。
appSecret作为接入密钥。
例如:appkey=hh appSecret=39ertfefdsg406c7c36592d42022aaecc
请求路径
http://www.example.com/login
请求参数
appKey hh 合作方平台标识
username 用户名
password 密码
time Unix时间戳(10位)
sign 签名串

2. 加密要求

将筛选的参数按照第一个字符的键值ASCII码递增排序(字母升序排序),如果遇到相同字符则按照第二个字符的键值ASCII码递增排序,以此类推。
将排序后的参数与其对应值,组合成“参数=参数值”的格式,并且把这些参数用&字符连接起来,此时生成的字符串为待签名字符串
生成签名
sign = md5(待签名字符串)
示例
例如:
sign = md5(待签串)
参数表为:
appKey=hs,
username=lzl,
password=88fsdfgsff8fd9ssg99
time=1432432234
待签名字符串为(取排序后的结果,这里key不参与排序):
appKey=hh&password=HG20170113140431206&time=1423212323&key=密钥

3. 处理流程

我们根据加密要求,把要传送的字段进行排序和MD5加密。将加密后的结果和传输的字段一并送过去。
appKey=hh&password=HG20170113140431206&time=1423212323&key=密钥&sign=签名串。
验证方式:
如何保证这条http请求能够正常相应数据呢?提供接口方,也是根据传输的字段进行排序和MD5加密。将加密后的结果verifySign与sign进行
比较。如果相同,就说明是一个正常的请求。反之,就是以非法请求。
代码示例:

public class MD5Utils {/*** 参数签名加密* @param parameters* @param secret* @return*/public static String signRequest(TreeMap<String,String> parameters,String secret,String charset){TreeMap<String, String> treeMap = new TreeMap<>(new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return o1.compareTo(o2);}});treeMap = (TreeMap<String, String>) parameters;System.out.println("升序排序结果:"+treeMap);StringBuffer sb = new StringBuffer();//把map中的集合拼接成字符串for(Map.Entry<String, String> entry:treeMap.entrySet()){String key = entry.getKey();Object value = entry.getValue();sb.append(key).append("=").append(value).append("&");}sb.append("key").append("=").append(secret);System.out.println("拼接后的字符:"+sb.toString());//进行MD5加密String sign = DigestUtils.md5Hex(getContentBytes(sb.toString(), charset));System.out.println("加密后的签名:"+sign);return sign;}/*** @param content* @param charset* @return* @throws SignatureException* @throws UnsupportedEncodingException */private static byte[] getContentBytes(String content, String charset) {if (charset == null || "".equals(charset)) {return content.getBytes();}try {return content.getBytes(charset);} catch (UnsupportedEncodingException e) {throw new RuntimeException("MD5签名过程中出现错误,指定的编码集不对,您目前指定的编码集是:" + charset);}}public static void main(String[] args) {TreeMap<String,String> treeMap = new TreeMap<>();treeMap.put("appKey", "hh");treeMap.put("username", "1335288");treeMap.put("password", "435rewt32423ewt4325terw");treeMap.put("time", String.valueOf(System.currentTimeMillis()/1000));String key = "密钥";MD5Utils.signRequest(treeMap,key,"utf-8");}
}

这篇关于接口安全--http数字签名的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1049524

相关文章

vue3项目将所有访问后端springboot的接口统一管理带跨域

vue3项目将所有访问后端springboot的接口统一管理带跨域 一、前言1.安装Axios2.创建Axios实例3.创建API服务文件4.在组件中使用API服务 二、跨域三、总结 一、前言 在Vue 3项目中,统一管理所有访问后端Spring Boot接口的最佳实践是创建一个专门的API服务层。这可以让你的代码更加模块化、可维护和集中管理。你可以使用Axios库作为HTT

9 个 GraphQL 安全最佳实践

GraphQL 已被最大的平台采用 - Facebook、Twitter、Github、Pinterest、Walmart - 这些大公司不能在安全性上妥协。但是,尽管 GraphQL 可以成为您的 API 的非常安全的选项,但它并不是开箱即用的。事实恰恰相反:即使是最新手的黑客,所有大门都是敞开的。此外,GraphQL 有自己的一套注意事项,因此如果您来自 REST,您可能会错过一些重要步骤!

数据库原理与安全复习笔记(未完待续)

1 概念 产生与发展:人工管理阶段 → \to → 文件系统阶段 → \to → 数据库系统阶段。 数据库系统特点:数据的管理者(DBMS);数据结构化;数据共享性高,冗余度低,易于扩充;数据独立性高。DBMS 对数据的控制功能:数据的安全性保护;数据的完整性检查;并发控制;数据库恢复。 数据库技术研究领域:数据库管理系统软件的研发;数据库设计;数据库理论。数据模型要素 数据结构:描述数据库

使用JWT进行安全通信

在现代Web应用中,安全通信是至关重要的。JSON Web Token(JWT)是一种流行的安全通信方式,它允许用户和服务器之间安全地传输信息。JWT是一种紧凑的、URL安全的表示方法,用于在两方之间传输信息。本文将详细介绍JWT的工作原理,并提供代码示例帮助新人理解和实现JWT。 什么是JWT? JWT是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间以JSO

微服务中RPC的强类型检查与HTTP的弱类型对比

在微服务架构中,服务间的通信是一个至关重要的环节。其中,远程过程调用(RPC)和HTTP是两种最常见的通信方式。虽然它们都能实现服务间的数据交换,但在类型检查方面,RPC的强类型检查和HTTP的弱类型之间有着显著的差异。本文将深入探讨这两种通信方式在类型检查方面的优缺点,以及它们对微服务架构的影响。 一、RPC的强类型检查 RPC的强类型检查是其核心优势之一。在RPC通信中,客户端和服务端都使

el-upload 上传图片及回显照片和预览图片,文件流和http线上链接格式操作

<div v-for="(info, index) in zsjzqwhxqList.helicopterTourInfoList" :key="info.id" >编辑上传图片// oss返回线上地址http链接格式:<el-form-itemlabel="巡视结果照片":label-width="formLabelWidth"><el-upload:action="'http:

HTTP状态码中301与302的区别

一.官方说法  301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于:  301 redirect: 301 代表永久性转移(Permanently Moved)。  302 redirect: 302 代表暂时性转移(Temporarily Moved )。  这是很官方的说法,那么它们的区别到底是什么呢?  1.1、什么是301转向?什么是301重定向?

linux常用API接口

linux常用API接口 文章目录 linux常用API接口1.应用层内存映射mmap取消内存映射munmap终端打印可用方式1.puts 函数2.文件操作函数 fprintf3.字符输出函数 putchar4.fwrite 函数 2.内核层 1.应用层 内存映射mmap mmap 是一个用于内存映射的系统调用,它可以将一个文件或设备中的内容映射到进程的地址空间中,允许程

如何给文档设置密码?电脑文件安全加密的详细操作步骤(10种方法)

在数字化时代,电脑文件的安全和隐私至关重要。通过给电脑的文件或者文件夹设置密码和加密,可以有效保护你的重要文件不被未经授权的人员访问,特别是公司的重要岗位,一些特殊的机密文件,投标文件,资金文件等等,更应该注重文件日常使用安全性。下面将为你介绍10种电脑文件,文件夹加密的详细操作步骤,帮助你更好地保护你的电脑文件安全。 加密方式一、Windows系统内置加密(电脑自带的文件加密) 选中需要

安全科普:理解SSL(https)中的对称加密与非对称加密

今天刚好为站点的后台弄了下https,就来分享我了解的吧。 密码学最早可以追溯到古希腊罗马时代,那时的加密方法很简单:替换字母。 早期的密码学:   古希腊人用一种叫 Scytale 的工具加密。更快的工具是 transposition cipher—:只是把羊皮纸卷在一根圆木上,写下信息,羊皮纸展开后,这些信息就加密完成了。 虽然很容易被解密,但它确实是第一个在现实中应用加密的