mirror of
https://github.com/Physton/sd-webui-prompt-all-in-one.git
synced 2026-04-29 02:31:13 +00:00
65 lines
2.6 KiB
Python
65 lines
2.6 KiB
Python
import hashlib, hmac, json, time
|
||
from datetime import datetime
|
||
|
||
def sign_tencent(secret_id, secret_key, regin, params, action="TextTranslate", version = "2018-03-21"):
|
||
host = 'tmt.tencentcloudapi.com'
|
||
endpoint = "https://" + host
|
||
action = "TextTranslate"
|
||
|
||
service = "tmt"
|
||
algorithm = "TC3-HMAC-SHA256"
|
||
timestamp = int(time.time())
|
||
date = datetime.utcfromtimestamp(timestamp).strftime("%Y-%m-%d")
|
||
|
||
# ************* 步骤 1:拼接规范请求串 *************
|
||
http_request_method = "POST"
|
||
canonical_uri = "/"
|
||
canonical_querystring = ""
|
||
ct = "application/json; charset=utf-8"
|
||
payload = json.dumps(params)
|
||
canonical_headers = "content-type:%s\nhost:%s\nx-tc-action:%s\n" % (ct, host, action.lower())
|
||
signed_headers = "content-type;host;x-tc-action"
|
||
hashed_request_payload = hashlib.sha256(payload.encode("utf-8")).hexdigest()
|
||
canonical_request = (http_request_method + "\n" +
|
||
canonical_uri + "\n" +
|
||
canonical_querystring + "\n" +
|
||
canonical_headers + "\n" +
|
||
signed_headers + "\n" +
|
||
hashed_request_payload)
|
||
|
||
# ************* 步骤 2:拼接待签名字符串 *************
|
||
credential_scope = date + "/" + service + "/" + "tc3_request"
|
||
hashed_canonical_request = hashlib.sha256(canonical_request.encode("utf-8")).hexdigest()
|
||
string_to_sign = (algorithm + "\n" +
|
||
str(timestamp) + "\n" +
|
||
credential_scope + "\n" +
|
||
hashed_canonical_request)
|
||
|
||
|
||
# ************* 步骤 3:计算签名 *************
|
||
# 计算签名摘要函数
|
||
def sign(key, msg):
|
||
return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest()
|
||
secret_date = sign(("TC3" + secret_key).encode("utf-8"), date)
|
||
secret_service = sign(secret_date, service)
|
||
secret_signing = sign(secret_service, "tc3_request")
|
||
signature = hmac.new(secret_signing, string_to_sign.encode("utf-8"), hashlib.sha256).hexdigest()
|
||
|
||
# ************* 步骤 4:拼接 Authorization *************
|
||
authorization = (algorithm + " " +
|
||
"Credential=" + secret_id + "/" + credential_scope + ", " +
|
||
"SignedHeaders=" + signed_headers + ", " +
|
||
"Signature=" + signature)
|
||
|
||
return {
|
||
"url": endpoint,
|
||
"headers": {
|
||
"Authorization": authorization,
|
||
"Content-Type": ct,
|
||
"Host": host,
|
||
"X-TC-Action": action,
|
||
"X-TC-Timestamp": str(timestamp),
|
||
"X-TC-Version": version,
|
||
"X-TC-Region": regin,
|
||
},
|
||
} |