栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

腾讯云 签名方法V3的 python 实现

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

腾讯云 签名方法V3的 python 实现

基于官方文档
使用时,需修改body(请求完整字符串),API key,及Service(使用的服务的名称)等。
如频繁验证失败,建议根据官方API explorer中的签名生成功能逐步检查生成过程。

复现程序时遇到的几个坑:
1.hmac 256算法的返回值使用的是二进制表示,在四次反复运算后才通过十六进制转换变为最终输出的签名
2.加密算法的输入值应为二进制,部分字符串需要进行解码
3.时间和日期统一使用utc时间和日期

import hashlib, time
import hmac

# based on https://cloud.tencent.com/document/api/213/30654


def HMAC_SHA256(key, data):
    """请注意,不同的编程语言,HMAC 库函数中参数顺序可能不一样,请以实际情况为准。
    此处的伪代码密钥参数 key 在前,消息参数 data 在后。
    通常标准库函数会提供二进制格式的返回值,也可能会提供打印友好的十六进制格式的返回值,此处使用的是二进制格式。"""
    print(type(key), type(data))
    return hmac.new(key, data, digestmod=hashlib.sha256).digest()


body = '{}'
SecretId = '1'
SecretKey = "1"


# 1. 拼接规范请求串
HTTPRequestMethod = 'POST'
CanonicalURI = '/'
CanonicalQueryString = ''
CanonicalHeaders = 'content-type:application/jsonn' 
                   'host:ocr.tencentcloudapi.comn'
SignedHeaders = 'content-type;host'
HashedRequestPayload = hashlib.sha256(str(body).encode('utf-8')).hexdigest()

CanonicalRequest = HTTPRequestMethod + 'n' + CanonicalURI + 'n' + CanonicalQueryString + 'n' + CanonicalHeaders + 'n' + SignedHeaders + 'n' + HashedRequestPayload


# 2. 拼接待签名字符串
Algorithm = 'TC3-HMAC-SHA256'
RequestTimestamp = 1635216626  # int(time.time())
Date = time.strftime("%Y-%m-%d", time.gmtime())
Service = 'ocr'
CredentialScope = f'{Date}/{Service}/tc3_request'
HashedCanonicalRequest = hashlib.sha256(str(CanonicalRequest).encode('utf-8')).hexdigest()

StringToSign = Algorithm + 'n' + str(RequestTimestamp) + 'n' + CredentialScope + 'n' + HashedCanonicalRequest


# 3. 计算签名
SecretDate = HMAC_SHA256(("TC3" + SecretKey).encode('utf-8'), Date.encode('utf-8'))
SecretService = HMAC_SHA256(SecretDate, Service.encode('utf-8'))
SecretSigning = HMAC_SHA256(SecretService, b"tc3_request")

Signature = HMAC_SHA256(SecretSigning, StringToSign.encode('utf-8')).hex()


# 4. 拼接 Authorization
Authorization = Algorithm + ' ' + 'Credential=' + SecretId + '/' + CredentialScope + ', ' + 'SignedHeaders=' + SignedHeaders + ', ' + 'Signature=' + Signature

print(Authorization)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/350643.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号