前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Auto.js中实现HMAC-SHA256加密算法,支持腾讯云v3签名

Auto.js中实现HMAC-SHA256加密算法,支持腾讯云v3签名

作者头像
主机优惠教程
发布2022-04-09 20:36:26
1.4K0
发布2022-04-09 20:36:26
举报

最近在Auto.js中做腾讯云的文字识别OCR,其中有个难点是腾讯云的v3签名(有时也称作 TC3-HMAC-SHA256),其中需要用到几个加密算法,在其他服务端语言中都有现成的函数可以使用,但是在JavaScript和Auto.js中都找不到对应的函数,幸好Auto.js支持Java,参考Java代码稍微转换一下就可以用了。

今天介绍的是HMAC-SHA256加密算法。相当于PHP的 hash_hmac("SHA256", data, key);

代码语言:javascript
复制
/*
测试环境:
AutoX.js 5.5.3
安卓7.1模拟器
*/

importClass(java.nio.charset.StandardCharsets);
importClass(java.security.MessageDigest);
importClass(javax.crypto.Mac);
importClass(javax.crypto.spec.SecretKeySpec);

// 设置字符编码
const UTF8 = StandardCharsets.UTF_8;

function byteArrayToHexString(bytes) {
    var val = "";
    for (var i = 0; i < bytes.length; i++) {
        var tmp = bytes[i];
        if (tmp < 0) {
            tmp = 256 + tmp;
        }
        tmp = tmp.toString(16);
        if ((tmp + "").length == 1) {
            tmp = "0" + tmp;
        }
        val += tmp;
    }
    return val;
}

/*
参数 说明:

key
二进制数据。使用 HMAC 生成信息摘要时所使用的密钥。

data
字符串。要进行哈希运算的数据。

raw_output
布尔值。默认 false
设置为 true 输出二进制数据,设置为 false 输出 16 进制字符串

*/
function hmac256(key, data, raw_output) {
    if (!raw_output) { raw_output = false; }

    data = java.lang.String(data);

    var mac = Mac.getInstance("HmacSHA256");
    var secret_key = new SecretKeySpec(key, "HmacSHA256");
    mac.init(secret_key);
    var bytes = mac.doFinal(data.getBytes(UTF8));

    if (!raw_output)
        return byteArrayToHexString(bytes);
    else
        return bytes;
}


// 调用示例
var key = '123', data = 'abc';

// 将key转换为二进制数据
keyBytes = java.lang.String(key).getBytes(UTF8);

var result = hmac256(keyBytes, data);
console.log(result);

-- 完 --

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文字识别
文字识别(Optical Character Recognition,OCR)基于腾讯优图实验室的深度学习技术,将图片上的文字内容,智能识别成为可编辑的文本。OCR 支持身份证、名片等卡证类和票据类的印刷体识别,也支持运单等手写体识别,支持提供定制化服务,可以有效地代替人工录入信息。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档