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 ...
随机推荐
- (三)Java工程化--Git起步
GIT学习参考:https://git-scm.com/book/zh/v2 版本控制 版本控制记录了一个或若干文件的历史变化,便于今后查阅,恢复. 三类版本控制系统 本地版本控制系统 RCS : 本 ...
- 用可配置外部工具的编辑器编译与执行java
用可配置外部工具的编辑器编译与执行java 最近用了everedit.觉得比之前平时用的Editplus有更多的细节与功能要好许多. 这里就写写用everedit编译与执行java的方法. 原理 ja ...
- 【原创】大叔经验分享(6)Oozie如何查看提交到Yarn上的任务日志
通过oozie job id可以查看流程详细信息,命令如下: oozie job -info 0012077-180830142722522-oozie-hado-W 流程详细信息如下: Job ID ...
- 绑定bindchange事件的微信小程序swiper闪烁,抖动问题解决,(将微信小程序切换到后台一段时间,再打开微信小程序,会出现疯狂循环轮播,造成抖动现象)
微信小程序开发文档-组件-swiper后面追加的新闻如上图所示: 如果在bindchange事件给swiper的current属性对应的值{{current}}赋值,就会造成抖动现象. bindcha ...
- HTML常用基础标签
HTML常用基础标签 带有语义的标签 <em> </em> 强调 <strong> </strong> 比em强调级别高 <abbr> &l ...
- 末学者笔记--Linux计划任务及压缩归档
一.计划任务 1.介绍: (1)定义:简单说就是通过一些设置,来使linux系统定时执行一些操作与任务. (2)作用:一般可执行一些周期性操作,也可定期备份数据. (3)可使用的命令:常用为at和cr ...
- 剑指offer数组2
面试题39:数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次, ...
- Winform Focus()函数不起作用 解决办法
private void Form_Load(object sender, EventArgs e) { this.txtName.Focus(); } 光标到不了txtName.可能的原因 TabI ...
- 一、ESP8266入门(基于LUA开发)
序 一入坑便停不下来... 还挺有意思的哈,233,,,, 资料杂,自己一个一个去找确实浪费了不少时间,而且大多还都是英文的,需要硬着头皮看. 这次实践入门,更是对英语的重要确信无疑.Github必须 ...
- Codeforces 750E New Year and Old Subsequence 线段树 + dp (看题解)
New Year and Old Subsequence 第一感觉是离线之后分治求dp, 但是感觉如果要把左边的dp值和右边的dp值合起来, 感觉很麻烦而且时间复杂度不怎么对.. 然后就gun取看题解 ...