签名算法

在中文站开放平台,url请求的多个参数都要参与签名(与文件上传有关的api中,文件字节流那个参数不参与签名),下面以两个参数为例,假设请求的url格式如下所示:
http://gw.open.1688.com/openapi/param2/1/system/currentTime/1000000?b=2&a=1(appKey=1000000,假设secretKey=test123)

参照签名算法说明,签名串s组装规则为:

1、 构造签名因子:urlPath。url 中的一部分,我们称之为urlPath,从协议(param2)开始截取,到“?”为止,urlPath=param2/1/system/currentTime/1000000

2、 构造签名因子:拼装的参数。参数 b=2&a=1 按照首字母排序,排序后为 a=1&b=2,然后去掉 =和& ,为a1b2

3、 合并两个签名因子。把前两步的字符串拼起来,得到s = param2/1/system/currentTime/1000000a1b2

4、 对合并后的签名因子执行hmac_sha1算法。 Signature=uppercase (hex (hmac_sha1 (s, secretKey)) 得到签名33E54F4F7B989E3E0E912D3FBD2F1A03CA7CCE88

——secretKey为签名密钥,与urlPath中的appKey(1000000)对应

——hmac_sha1为通用的hmac_sha1算法,各编程语言一般都对应类库

——hex为转为十六进制

——uppercase为转为大写字符

说明:API签名算法主要是使用urlPath和请求参数作为签名因子进行签名,主要针对api 调用

时间: 2024-10-09 23:27:35

签名算法的相关文章

DSA签名算法笔记

注意:只是个人理解,可能有不正确的地方 DSA(Digital Signature Algorithm)签名算法是由美国国家标准与技术研究院(NIST, National Institute of Standards and Technology)提出的一个关于数字签名的美国联邦信息处理标准(FIPS, Federal Information Processing Standard).该标准在1991年8月提出,1993以FIPS 186被采用,作为数字签名(DSS, Digital Signa

c#使用椭圆签名算法制作软件序列号

椭圆曲线密码学(Elliptic curve cryptography,缩写为ECC)是基于椭圆曲线数学的一种公钥密码的方法.椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的.椭圆签名算法应该是微软最先用在软件保护上的,我们平常用的25位序列号就是基于椭圆签名算法的.理论上说,椭圆签名算法是很难破解的,因为...(省略,感兴趣的可以看看<ECC加密算法入门介绍>这篇文章).但是因为微软出于序列号长度的考虑,签名的长度只有62bit(具体

Java数字签名算法--RSA

签名具有的特性: 安全性 抗否认性 数字签名:带有密钥(公钥.私钥)的消息摘要算法(使用私钥进行签名,使用公钥进行验证) 数字签名算法:RSA.DSA.ECDSA 数字签名特性: 验证数据完整性 认证数据来源 抗否认性 经典算法 MD.SHA两类 数字签名算法-RSA的执行过程 代码: package com.chengxuyuanzhilu.rsa; import java.security.InvalidKeyException; import java.security.KeyFactor

亚马逊云存储签名算法问题

最近在研究云存储. 如果没有相关背景知识的朋友,请先百度. 我首先要说的是是签名算法错误问题,可能是他们网站内容错误,请核查. 如下. http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-authentication-HTTPPOST.html 样例网站如下: http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html 我采用三方在线加密网站,算出来的密码与AM

ElGamal加密、签名算法笔记

ElGamal加密算法是一种非对称加密算法,基于Diffie-Hellman密钥交换算法,由Taher Elgamal在1985年提出. ElGamal加密算法可以应用在任意一个循环群(cyclic group)上.在群中有的运算求解很困难,这些运算通常与求解离散对数(Discrete logarithm)相关,求解的困难程度决定了算法的安全性. 群(Group)的定义: 群是数学中的概念. 一些元素组成的集合,如果元素满足以下条件,则把这些元素组成的集合叫做群: 在元素上可以定义一个2元运算,

微信签名算法的服务端实现(.net版本)

一.概要 微信此次开放JS接口,开放了一大批api权限,即使在未认证的订阅号也可以使用图像接口,音频接口,智能接口,地理位置,界面操作,微信扫一扫等功能.要知道:以前订阅号只能接受和被动回复用户消息而已.微信官方没有给出.net版本,有java,node,php和python,唯独没有.net版本,这是怎么了?本文就教你实现.net版本的微信JS-SDK权限签名生成算法. 这会大大激发了js前端开发人员的热情,可以做更多的事情,不用在向以前一样用破解微信的weixinbridge狼狈的苟活于人世

微信JS SDK使用权限签名算法

jsapi_ticket 生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据.正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取.由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket . 参考以下文档获取access_token(有效期7200秒,开发者必须在自己的

PHP、Java、C#实现URI参数签名算法,确保应用与REST服务器之间的安全通信,防止Secret Key盗用、数据篡改等恶意攻击行为

简介 应用基于HTTP POST或HTTP GET请求发送Open API调用请求时,为了确保应用与REST服务器之间的安全通信,防止Secret Key盗用.数据篡改等恶意攻击行为,REST服务器使用了参数签名机制.应用在调用Open API之前,需要为其所有请求参数计算一个MD5签名,并追加到请求参数中,参数名为“sign”.REST服务器在接收到请求时会重新计算签名,并判断其值是否与应用传递过来的sign参数值一致,以此判定当前Open API调用请求是否是被第三者伪造或篡改. 应用在调用

一段JAVA签名算法的PHP改写

源代码是这样的: public class AuthorizationSignature { public static String createSignature(String verb, String contentMD5, String contentType, String date, String canonicalizedSALHeaders, String canonicalizedResource) { String signatureStr = verb + "\\n&quo