3

所以我一直在尝试在 Google Script 中使用 SHA256 来镜像双重哈希,但我无法复制第二个哈希。第一个被正确复制,但随后必须将第一个哈希插入下一个摘要中。

  var teststring = "hello";

  var firsthash=Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, teststring); 

  var secondhash=Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, firsthash);

  app.getElementById('balancelabel').setText("result: "+secondhash);

然后我在在线转换器上查找第一个哈希和第二个哈希。第一个哈希符合以下预期,第二个不符合。我已经尝试了很多方法来尝试修改 firsthash 变量,但似乎无法使其工作。

This is what the hashes should be: hello 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (first round of sha-256) 9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50 (second round of sha-256)

我也一直在努力获取该字节哈希并生成一个十六进制编码的字符串(不是 base64,Google Script 似乎确实支持开箱即用)。

有人可以帮忙吗?

编辑:使用 Utitilies.computeDigest 似乎是不可能的,因为它只接受字符串作为输入。但是,我刚刚检查了我可以在 Google Script 中实现这个 JS sha256 函数。如何使用第一个哈希的字节输入进行双重哈希?

SHA256 JavaScript 函数

4

2 回答 2

3
function sign(message){
message = message || "thisisteststring";
var signature = Utilities.computeDigest(
                Utilities.DigestAlgorithm.SHA_1,
                message,
                Utilities.Charset.US_ASCII);
Logger.log(signature);
var signatureStr = '';
for (i = 0; i < signature.length; i++) {
   var byte = signature[i];
    if (byte < 0)
      byte += 256;
var byteStr = byte.toString(16);
// Ensure we have 2 chars in our byte, pad with 0
if (byteStr.length == 1) byteStr = '0'+byteStr;
signatureStr += byteStr;
}

 Logger.log(signatureStr);
return signatureStr;
}

您可以使用此功能将字符串转换为您想要的格式吗

于 2013-07-26T11:45:21.673 回答
0

最近有一个相关的问题:从 computeDigest(algorithm, value) byte[] 取回字符串表示

我用该问题的答案修改了要点,它现在包含一个使用 sha256 返回字符串摘要的函数。

var teststring = "hello";
var result = signSHA_256(signSHA_256(teststring));
// d7914fe546b684688bb95f4f888a92dfc680603a75f23eb823658031fff766d9

在线工具的结果

双重摘要调用的结果与在线生成器的结果相匹配。

在此处输入图像描述

于 2013-05-10T12:41:23.540 回答