首页 > 解决方案 > 如何使用 SubtleCrypto 在 chrome 扩展中对文本进行 SHA-256 哈希处理

问题描述

我正在使用 Subtle Crypto 散列一个文本字段并获得一个 [object ArrayBuffer]。

相关代码在这里:

async function asyncCall() {
  var enc = new TextEncoder(); // always utf-8
  var enc2 = new TextDecoder(); // always utf-8
  var digest3 = enc.encode(localStorage.getItem("Item 1"));
  const digest2 = await crypto.subtle.digest("SHA-256", (digest3));

  localStorage.setItem("Item Hashed", (digest2));
  field2.value = localStorage.getItem("Item Hashed");
};

当我用这个散列任何文本(“项目 1”是使用文本字段定义的 localStorage 文本)时,我得到 [object ArrayBuffer] 作为结果。为什么我没有得到看起来像 SHA256 哈希的东西?

标签: javascriptgoogle-chrome-extensionhashsha256

解决方案


将 ArrayBuffer 转换为十六进制字符串:

  const hashArray = Array.from(new Uint8Array(digest2));                     // convert buffer to byte array
  const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); // convert bytes to hex string

https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest#converting_a_digest_to_a_hex_string


推荐阅读