HMAC-SHA256 签名方法各个语音的实现方式之前端JavaScriptes6
sha256和16进制输出,网上很多种后端的验证方法,几乎没有前端的,所以自己写了个,希望给类似需求的人一个帮助,适用场景
腾讯云接口鉴权 v3签名
npm install sha256
npm install crypto-js
export function JsonSort256(jsonDataPost=null) {
// 第一步
// HTTP 请求方法(GET、POST )本示例中为 GET;
let HTTPRequestMethod = 'GET';
// URI 参数,API 3.0 固定为正斜杠(/)
let CanonicalURI = '/';
// CanonicalQueryString:发起 HTTP 请求 URL 中的查询字符串,对于 POST 请求,固定为空字符串,对于 GET 请求,则为 URL 中问号(?)后面的字符串内容,本示例取值为:Limit=10&Offset=0。注意:CanonicalQueryString 需要经过 URL 编码。
let CanonicalQueryString = 'Limit=10&Offset=0';
// 参与签名的头部信息,至少包含 host 和 content-type 两个头部,也可加入自定义的头部参与签名以提高自身请求的唯一性和安全性。拼接规则:1)头部 key 和 value 统一转成小写,并去掉首尾空格,按照 key:value\n 格式拼接;2)多个头部,按照头部 key(小写)的字典排序进行拼接。此例中为:content-type:application/x-www-form-urlencoded\nhost:cvm.tencentcloudapi.com\n
let CanonicalHeaders = 'content-type:application/x-www-form-urlencoded\nhost:cvm.tencentcloudapi.com\n';
// 参与签名的头部信息,说明此次请求有哪些头部参与了签名,和 CanonicalHeaders 包含的头部内容是一一对应的。content-type 和 host 为必选头部。拼接规则:1)头部 key 统一转成小写;2)多个头部 key(小写)按照字典排序进行拼接,并且以分号(;)分隔。此例中为:content-type;host
let SignedHeaders = 'content-type;host';
// 请求正文的哈希值,计算方法为 Lowercase(HexEncode(Hash.SHA256(RequestPayload))),对 HTTP 请求整个正文 payload 做 SHA256 哈希,然后十六进制编码,最后编码串转换成小写字母。注意:对于 GET 请求,RequestPayload 固定为空字符串,对于 POST 请求,RequestPayload 即为 HTTP 请求正文 payload。
let HashedRequestPayload = sha256(encodeURI('')).toLowerCase();
// 拼接规范请求串
let CanonicalRequest =
HTTPRequestMethod + '\n' +
CanonicalURI + '\n' +
CanonicalQueryString + '\n' +
CanonicalHeaders + '\n' +
SignedHeaders + '\n' +
HashedRequestPayload;
console.log('完成第一步',CanonicalRequest); // 第二步
// 签名算法,目前固定为 TC3-HMAC-SHA256;
let Algorithm = 'TC3-HMAC-SHA256';
// 请求时间戳,即请求头部的 X-TC-Timestamp 取值,如上示例请求为 1539084154;
let RequestTimestamp = '1539084154';
// 凭证范围,格式为 Date/service/tc3_request,包含日期、所请求的服务和终止字符串(tc3_request)。Date 为 UTC 标准时间的日期,取值需要和公共参数 X-TC-Timestamp 换算的 UTC 标准时间日期一致;service 为产品名,必须与调用的产品域名一致,例如 cvm。如上示例请求,取值为 2018-10-09/cvm/tc3_request;
let CredentialScope = '2018-10-09/cvm/tc3_request';
// 前述步骤拼接所得规范请求串的哈希值,计算方法为 Lowercase(HexEncode(Hash.SHA256(CanonicalRequest)))。
let HashedCanonicalRequest = sha256(CanonicalRequest).toLowerCase();
let StringToSign =
Algorithm + '\n' +
RequestTimestamp + '\n' +
CredentialScope + '\n' +
HashedCanonicalRequest;
console.log('完成第二步',StringToSign); // 第三步
// 原始的 SecretKey;
let SecretKey = "Gu5t9xGARNpq86cd98joQYCN3EXAMPLE";
// Date:即 Credential 中的 Date 字段信息,如上示例,为2018-10-09;
let SecretDate = HmacSHA256('2018-10-09',"TC3" + SecretKey);
// Service:即 Credential 中的 Service 字段信息,如上示例,为 cvm;
let SecretService = HmacSHA256('cvm',SecretDate);
// SecretSigning:即以上计算得到的派生签名密钥;
let SecretSigning = HmacSHA256("tc3_request",SecretService);
// StringToSign:即步骤2计算得到的待签名字符串;
let Signature = Hex.stringify(HmacSHA256(StringToSign,SecretSigning));
console.log('完成第三步',Signature); // 第四步
// 签名方法,固定为 TC3-HMAC-SHA256;
// let Algorithm = 'TC3-HMAC-SHA256';
// SecretId:密钥对中的 SecretId;
let SecretId = 'AKIDz8krbsJ5yKBZQpn74WFkmLPx3EXAMPLE';
// let Authorization =
// Algorithm + ' ' +
// 'Credential=' + SecretId + '/' + CredentialScope + ', ' +
// 'SignedHeaders=' + SignedHeaders + ', '
// 'Signature=' + Signature;
let Authorization =
Algorithm + ' ' +
'Credential=' + SecretId + '/' + CredentialScope + ', ' +
'SignedHeaders=' + SignedHeaders + ', '+
'Signature=' + Signature
console.log('完成第四步',Authorization);
}
sha256编码
Hex表示以小写字母形式返回摘要的 base-16 编码的函数
HMAC-SHA256 签名方法各个语音的实现方式之前端JavaScriptes6的更多相关文章
- hashlib加密模块主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法,HMAC消息签名(HMAC-SHA1,....)
hashlib模块 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 MD5 摘要输出 # ...
- Android apk签名方法介绍
还望支持个人博客站:http://www.enjoytoday.cn 参考博客:http://www.enjoytoday.cn/posts/203 为什么要签名 在介绍签名方法之前,首先我们来了解下 ...
- 微信退款通知,退款回调数据解密.SHA256签名AEAD_AES_256_GCM解密
$xmlResult = file_get_contents("php://input");//获取微信的数据$result = $this->xmlToArray($xml ...
- 简要介绍BASE64、MD5、SHA、HMAC几种方法。
加密解密,曾经是我一个毕业设计的重要组件.在工作了多年以后回想当时那个加密.解密算法,实在是太单纯了. 言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书. ...
- 各种语言HMAC SHA256实现
语言包含: Javascript ,PHP,Java,Groovy,C#,Objective C,Go,Ruby,Python,Perl,Dart,Swift,Rust,Powershell. Jav ...
- C#(.NET) HMAC SHA256实现
HMAC SHA256的实现比较简单,可以用多种语言实现,下面我用C#语言实现,一种结果是居于BASE64,另外一种是居于64位. C# HMAC SHA256 (Base64) using Syst ...
- Android APK生成证书并签名方法
Android APK生成证书并签名方法 android cordova keystore android证书签名 阅读:925 时间:2018年09月20日 Android开发者可能对此很熟悉.使用 ...
- 微信sdk php签名方法整理
<?php class JSSDK { private $appId; private $appSecret; public function __construct($appId, $appS ...
- .net通用签名方法 webapi签名方法
验证签名方法 [HttpGet] public HttpResponseMessage LockRegister(string 参数1, int 参数2, string 参数3, string 参数4 ...
随机推荐
- C# - 代码重构
隐藏更多 只暴露集合中供人使用的单一功能,将关于集合的更多功能隐藏掉. 旧版本 public class Animal{ private List<string> LanguageL ...
- 主机服务绑定IP
在用 netstat -na 查看当前主机提供的服务,例如显示如下结果: tcp 0 0 127.0.0.1:9000 0.0.0.0:* ...
- codeforces 1082G - Petya and Graph 最大权闭合子图 网络流
题意: 让你选一些边,选边的前提是端点都被选了,求所有的边集中,边权和-点权和最大的一个. 题解: 对于每个边建一个点,然后就是裸的最大权闭合子图, 结果比赛的时候我的板子太丑,一直T,(不会当前弧优 ...
- nginx: 应用访问默认采用https
主要配置如下: #静态文件的访问 server { listen 443 ssl; server_name static.jksfrz.com; ssl_certificate d:/app/ngin ...
- linux网关下drcom web自动登陆脚本
/etc/init.d/drcomd: #!/bin/sh # # The environment is cleared before executing this script # so the p ...
- 【原创】大叔经验分享(28)ELK分析nginx日志
提前安装好elk(elasticsearch.logstach.kibana) 一 启动logstash $LOGSTASH_HOME默认位于/usr/share/logstash或/opt/logs ...
- 20175226 2018-2019-2 《Java程序设计》第二周学习总结
20175226 2018-2019-2 <Java程序设计>第二周学习总结 教材学习内容总结 基本数据类型与数组 标识符与关键字 标识符不能是关键字.true.false.null.且第 ...
- const与#define的异同
1 作为常量时的异同 (0) 相同 两者都可以用来定义常量: #define PI 3.14159 // 常量宏 const doulbe Pi=3.14159; // 常量 (1) ...
- Spring AOP概念理解
1.我所知道的aop 初看aop,上来就是一大堆术语,而且还有个拉风的名字,面向切面编程,都说是OOP的一种有益补充等等.一下子让你不知所措,心想着:怪不得很多人都和我说aop多难多难.当我看进去以后 ...
- 手动部署 kubernetes HA 集群
前言 关于kubernetes HA集群部署的方式有很多种(这里的HA指的是master apiserver的高可用),比如通过keepalived vip漂移的方式.haproxy/nginx负载均 ...