从computeDigest(algorithm, value) byte[] 获取字符串表示形式

2024-02-24

Google App Script 函数computeDigest 返回签名的字节数组。如何获取摘要的字符串表示形式?

我已经尝试过 bin2String() 函数。

function sign(){     
var signature = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, "thisisteststring")
Logger.log(bin2String(signature));
}


function bin2String(array) {
  var result = "";
  for (var i = 0; i < array.length; i++) {
    result += String.fromCharCode(parseInt(array[i], 2));
  }
  return result;
}

但它把“”放入日志中


如果我们把Logger.log(signature);致电后立即computeDigest(),我们得到:

[8, 30, -43, 124, -101, 114, -37, 10, 78, -13, -102, 51, 65, -24, -83, 81]

正如javascript中所表示的,摘要包括正整数和负整数,因此我们不能简单地将它们视为ascii字符。然而,MD5 算法应该为我们提供 8 位值,范围在 0x00 到 0xFF (255) 之间。那么,这些负值只是对高位的误解;将其视为一个符号位。为了更正,我们需要将任何负值加上 256。

如何在 JavaScript 中将十进制转换为十六进制? https://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript为我们提供了检索十六进制字符的方法:

hexString = yourNumber.toString(16);

把它们放在一起,这就是你的sign()函数,这也是可作为要点 https://gist.github.com/mogsdad/5464686:

function sign(message){     
  message = message || "thisisteststring";
  var signature = Utilities.computeDigest(
                       Utilities.DigestAlgorithm.MD5,
                       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;
}

这是日志包含的内容:

[13-04-25 21:46:55:787 EDT] [8, 30, -43, 124, -101, 114, -37, 10, 78, -13, -102, 51, 65, -24, -83, 81]
[13-04-25 21:46:55:788 EDT] 081ed57c9b72db0a4ef39a3341e8ad51

让我们看看我们从中得到了什么这个在线 MD5 哈希生成器 http://www.miraclesalad.com/webtools/md5.php:

我用其他一些字符串进行了尝试,它们始终与在线生成器的结果相匹配。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从computeDigest(algorithm, value) byte[] 获取字符串表示形式 的相关文章