Auto.js中对字符串生成SHA256哈希值的方法

日期: 标签:Auto.js

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

今天介绍的是字符串生成SHA256算法的哈希值的方法。相当于PHP的 hash("SHA256", $str)

/*
测试环境:
AutoX.js 5.5.3
安卓7.1模拟器
*/

importClass(java.nio.charset.StandardCharsets);
importClass(java.security.MessageDigest);

// 二进制byte数组转换成十六进制输出
// byte[] 转Hex String
function byteToHexString(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;
}

// 将字符串生成SHA-256算法的哈希值 hash
// 相当于PHP的 hash("SHA256", $str);
// 返回值是16进制字符串
function sha256Hex(str) {
    // 字符串编码,这里是UTF-8
    let UTF8 = StandardCharsets.UTF_8;
    str = java.lang.String(str);
    var md = MessageDigest.getInstance("SHA-256");
    md.update(str.getBytes(UTF8));

    return byteToHexString(md.digest());
}

// a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
console.log( sha256Hex('123') );

如果希望返回的二进制数据,可以这样做:

// 返回值是二进制字符串
// 相当于PHP的 hash("SHA256", $str, true)
function sha256Hex(str) {
    // 字符串编码,这里是UTF-8
    let UTF8 = StandardCharsets.UTF_8;
    str = java.lang.String(str);
    var md = MessageDigest.getInstance("SHA-256");
    md.update(str.getBytes(UTF8));

    return md.digest();
}

相关文章:Auto.js中实现HMAC-SHA256加密算法

-- 完 --

本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜即刻 https://www.ludou.org/auto-js-hex-sha256-hash.html
露兜
kaapass@outlook.com  QQ 825533758

业余编程爱好者。