Google电子表格中的单元格文本的哈希值

HDB*_*HDB 36 google-sheets google-search-api

如何在特定单元格中计算文本的MD5或SHA1哈希并将其设置为Google电子表格中的另一个单元格?

有没有像一个公式=ComputeMD5(A1)=ComputeSHA1(A1)

或者是否可以为此编写自定义公式?怎么样?

小智 79

打开Tools > Script Editor然后粘贴以下代码:

function MD5 (input) {
  var rawHash = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, input);
  var txtHash = '';
  for (i = 0; i < rawHash.length; i++) {
    var hashVal = rawHash[i];
    if (hashVal < 0) {
      hashVal += 256;
    }
    if (hashVal.toString(16).length == 1) {
      txtHash += '0';
    }
    txtHash += hashVal.toString(16);
  }
  return txtHash;
}
Run Code Online (Sandbox Code Playgroud)

之后保存脚本,然后MD5()在引用单元格时使用电子表格中的函数.

此脚本基于Utilities.computeDigest()函数.

  • 更新:“扩展 &gt; Apps 脚本” (4认同)
  • 好答案。您可能想在函数内部的某个地方添加“ Utilities.sleep(100)”,以防止在使用自动填充函数时崩溃(否则会限制调用函数的频率) (3认同)
  • 我会将字符集 UTF8 添加到摘要计算中。`Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, input, Utilities.Charset.UTF_8);` (2认同)

小智 20

感谢gabhubert的代码.

这是该代码的SHA1版本(非常简单的更改)

function GetSHA1(input) {
  var rawHash = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_1, input);
  var txtHash = '';
  for (j = 0; j <rawHash.length; j++) {
    var hashVal = rawHash[j];
    if (hashVal < 0)
      hashVal += 256; 
    if (hashVal.toString(16).length == 1)
     txtHash += "0";
    txtHash += hashVal.toString(16);
    }
  return txtHash;
}
Run Code Online (Sandbox Code Playgroud)


HDB*_*HDB 5

好的,我知道了,

需要按照http://code.google.com/googleapps/appsscript/articles/custom_function.html中的说明创建自定义功能

然后按照http://code.google.com/googleapps/appsscript/service_utilities.html中的说明使用apis

我需要手动输入完整的函数名称,以便我可以在单元格中看到结果.

以下是给出文本的基本64编码散列的代码示例

function getBase64EncodedMD5(text)
{ 
  return Utilities.base64Encode( Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, text));
}
Run Code Online (Sandbox Code Playgroud)