Javascript 双哈希sha256不工作+;如何转换为十六进制?

Javascript 双哈希sha256不工作+;如何转换为十六进制?,javascript,google-apps-script,Javascript,Google Apps Script,所以我一直在尝试在Google脚本中使用SHA256镜像双哈希,但我无法复制第二个哈希。第一个得到了正确的复制,但是在第一个哈希插入到下一个摘要时,必须关闭某些东西 var teststring = "hello"; var firsthash=Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, teststring); var secondhash=Utilities.computeDigest(Utiliti

所以我一直在尝试在Google脚本中使用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变量,但似乎无法使其工作

这就是散列应该是什么: 你好 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824(第一轮sha-256) 9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50(第二轮sha-256)

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

有人能帮忙吗

编辑:似乎无法使用utilities.computeDigest,因为它只接受字符串作为输入。然而,我刚刚检查了我是否可以在Google脚本中实现这个JS sha256函数。如何使用第一个哈希的字节输入进行双哈希


最近有一个相关的问题:

我同意这个问题的答案,现在它包含了一个使用sha256返回字符串摘要的函数

var teststring = "hello";
var result = signSHA_256(signSHA_256(teststring));
// d7914fe546b684688bb95f4f888a92dfc680603a75f23eb823658031fff766d9
来自在线工具的结果 来自双摘要调用的结果与来自的结果匹配

功能标志(信息){
message=message | |“thisisteststring”;
var signature=Utilities.computeDigest(
Utilities.DigestAlgorithm.SHA_1,
消息
实用程序.Charset.US_ASCII);
Logger.log(签名);
var signatureStr='';
对于(i=0;i

您可以使用此函数将字符串转换为指定格式

看起来您将十六进制编码的第一个结果赋予第二个哈希,而不是原始结果,即
sha256(十六进制(sha256(x))
而不是
sha256(sha256(x))
Hmmm,那么我如何得到原始结果呢?我想Utilities.computeDigest会以字节形式返回原始结果。我不知道。我只是猜测它是编码的,因为您直接使用第二个散列。实际上,这会返回一个字节数组。True。我现在查看了文档。computeDigest接受字符串输入。不确定是否可以用于处理二进制数据。您好!非常感谢您花时间研究这个问题。但是,这是我一直得到的结果,这是错误的。显然,“d7…”散列不是第一个散列的散列,而是第一个散列的字符串表示的散列,这是两个不同的东西。第二个散列应该是"95.."第一个问题。问题似乎源于我无法将第一个哈希的字节表示形式输入到第二个SHA摘要中。不过,您的十六进制字符串表示形式实现正是我想要的!谢谢!!@user145453-也许您会找到一些帮助。建议使用拉丁字符集作为二进制,以避免默认值映射到UTF-8。
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;
}