sha256和16进制输出,网上很多种后端的验证方法,几乎没有前端的,所以自己写了个,希望给类似需求的人一个帮助,适用场景

腾讯云接口鉴权 v3签名

npm install sha256
npm install crypto-js
  import HmacSHA256 from 'crypto-js/hmac-sha256'
 import Hex from 'crypto-js/enc-Hex';
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的更多相关文章

  1. hashlib加密模块主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法,HMAC消息签名(HMAC-SHA1,....)

    hashlib模块 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 MD5 摘要输出 # ...

  2. Android apk签名方法介绍

    还望支持个人博客站:http://www.enjoytoday.cn 参考博客:http://www.enjoytoday.cn/posts/203 为什么要签名 在介绍签名方法之前,首先我们来了解下 ...

  3. 微信退款通知,退款回调数据解密.SHA256签名AEAD_AES_256_GCM解密

    $xmlResult = file_get_contents("php://input");//获取微信的数据$result = $this->xmlToArray($xml ...

  4. 简要介绍BASE64、MD5、SHA、HMAC几种方法。

    加密解密,曾经是我一个毕业设计的重要组件.在工作了多年以后回想当时那个加密.解密算法,实在是太单纯了.     言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书.     ...

  5. 各种语言HMAC SHA256实现

    语言包含: Javascript ,PHP,Java,Groovy,C#,Objective C,Go,Ruby,Python,Perl,Dart,Swift,Rust,Powershell. Jav ...

  6. C#(.NET) HMAC SHA256实现

    HMAC SHA256的实现比较简单,可以用多种语言实现,下面我用C#语言实现,一种结果是居于BASE64,另外一种是居于64位. C# HMAC SHA256 (Base64) using Syst ...

  7. Android APK生成证书并签名方法

    Android APK生成证书并签名方法 android cordova keystore android证书签名 阅读:925 时间:2018年09月20日 Android开发者可能对此很熟悉.使用 ...

  8. 微信sdk php签名方法整理

    <?php class JSSDK { private $appId; private $appSecret; public function __construct($appId, $appS ...

  9. .net通用签名方法 webapi签名方法

    验证签名方法 [HttpGet] public HttpResponseMessage LockRegister(string 参数1, int 参数2, string 参数3, string 参数4 ...

随机推荐

  1. 【原创】大数据基础之Azkaban(1)简介、源代码解析

    Azkaban3.45 一 简介 1 官网 https://azkaban.github.io/ Azkaban was implemented at LinkedIn to solve the pr ...

  2. [C][变量作用域]语句块

    概述 C语言作用域有点类似于链式结构,就是下层能访问上层声明的变量,但是上层则不能访问下层声明的变量: #include <stdio.h> #define TRUE 1 int main ...

  3. iOS -- Effective Objective-C 阅读笔记 (7)

    1: 实现 description 方法 NSlog 在输出自定义的类时, 只输出了 类名 和 对象的内存地址. 要想输出更为有用的信息也很简单, 只需要覆写 description 方法并将描述此对 ...

  4. Flask开发微电影网站(八)

    1.后台管理之电影预告管理 1.1 定义电影预告表单 在app的admin目录的forms.py文件中,定义电影预告表单 # 预告表单 class PreviewForm(FlaskForm): ti ...

  5. Redis在CentOS和Windows安装过程

    redis是一种key-value高效的内存数据库. key-value是什么?json懂吧?字典懂吧?这些都是key-value结构的数据,每个key对应1个value. 那这个数据库和我们网站在使 ...

  6. OpenCV绘制图像中RGB三个通道的直方图

    一开始是看<OpenCV计算机视觉编程攻略(第2版)>这本书学做直方图,但是书本里说直方图的部分只详细说了黑白图像(单通道)的直方图绘制方法,RGB图像的直方图只说了如何计算,没有说计算完 ...

  7. UOJ#347. 【WC2018】通道 边分治 虚树

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ347.html 题意 有三棵树,边有边权. 对于所有点对 (x,y) 求在三棵树上 x 到 y 的距离之和 ...

  8. selenium之使用chrome浏览器测试(附chromedriver与chrome的对应关系表)

    https://www.cnblogs.com/JHblogs/p/7699951.html

  9. Python WMI获取Windows系统信息

    #!/usr/bin/env python # -*- coding: utf-8 -*- #http://www.cnblogs.com/liu-ke/ import wmi import os i ...

  10. 五一劳动节,讲讲NEO智能合约的调试

    之前我们说过NEO智能合约的调试问题,过去了一段时间,有很多东西都发生了比较大的变化.让我们重新再来探讨一下这个话题. 先说日期,2018年4月27日,马上迎来劳动节.   以后可能还会再次谈论这个话 ...