起因是我在浏览器上装置了一个叫做网页翻译助手的油猴脚本,但只有百度,谷歌,有道的接口。我感觉腾讯翻译的后果也不错,就像本人加上去。

跟着官网文档一通操作,终于是把申请写进去了,然而有个问题,就是签名须要应用TC3-HMAC-SHA256算法。因为脚本不想要链接内部js的加密库,就像看一下规范api里边是否有相干性能。
尽管过程很艰巨,然而最总还是找到了解决办法。

以下是计算签名局部代码

 //字符串转为字节输出    const getUtf8Bytes = msg =>        new Uint8Array(            [...unescape(encodeURIComponent(msg))].map(c => c.charCodeAt(0))        );    /**     *     * */    async function HMAC_SHA256(keyBuffer, msg) {        const messageBuffer = getUtf8Bytes(msg);        const cryptoKey = await crypto.subtle.importKey(            "raw", keyBuffer, {name: "HMAC", hash: {name: "SHA-256"}},            true, ["sign"]        );        let hashArray = await window.crypto.subtle.sign(            "HMAC",            cryptoKey,            messageBuffer        );        return hashArray;    }    function HexEncode(hashBuffer) {        const hashArray = Array.from(new Uint8Array(hashBuffer));                     // convert buffer to byte array        const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); // convert bytes to hex string        return hashHex;    }    async function SHA256(str) {        const msgUint8 = new TextEncoder().encode(str);                           // encode as (utf-8) Uint8Array        const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);           // hash the message        return hashBuffer;    }    /**     * payload : json申请体     * timeStamp 工夫戳     * dateStr 年月日     * SecretKey      *      * */    async function calSignature(payload, timeStamp, dateStr, SecretKey) {        // 拼接标准申请串过程        let HTTPRequestMethod = "POST";        let CanonicalURI = '/';        let CanonicalQueryString = '';        let CanonicalHeaders = 'content-type:application/json\nhost:tmt.tencentcloudapi.com\n';        let SignedHeaders = 'content-type;host';        //Lowercase(HexEncode(Hash.SHA256(RequestPayload))) 依据payload 生成HashedRequestPayload。 做SHA256哈希,而后十六进制编码,最初编码串转换成小写字母        let HashedRequestPayload = HexEncode(await SHA256(JSON.stringify(payload))).toLowerCase();        //标准申请串        let CanonicalRequest = HTTPRequestMethod + '\n' + CanonicalURI + '\n' + CanonicalQueryString + '\n' + CanonicalHeaders + '\n' + SignedHeaders + '\n' + HashedRequestPayload;        // 拼接待签名字符串过程        // Lowercase(HexEncode(Hash.SHA256(CanonicalRequest)))        let HashedCanonicalRequest = HexEncode(await SHA256(CanonicalRequest)).toLowerCase();        let StringToSign = 'TC3-HMAC-SHA256\n' + timeStamp + '\n' + dateStr + '/tmt/tc3_request\n' + HashedCanonicalRequest        let SecretDate = await HMAC_SHA256(getUtf8Bytes("TC3" + SecretKey), dateStr)        let SecretService = await HMAC_SHA256(SecretDate, 'tmt')        let SecretSigning = await HMAC_SHA256(SecretService, "tc3_request")        let Signature = HexEncode(await HMAC_SHA256(SecretSigning, StringToSign))        return Signature;    }        async function test() {        let payload = {            "SourceText": "hello",            "Source": "auto",            "Target": "zh",            "ProjectId": 0        };        let timeStamp = 1619350841;        let dateStr = '2021-04-25';        //这个SecretKey是轻易写的        let SecretKey = 'mNRRUdaaaPeidRp6Bbbb8WmqcccuzsYF';        let result = await calSignature(payload, timeStamp, dateStr, SecretKey);        console.log(result)    }