如何在Javascript中将元素的innerHTML设置为哈希(SHA256)

问题描述 投票:0回答:1

我需要将段落的'hash-paragraph'.innerHTML设置为随机字符串(例如哈希(SHA256)),以后可以将其作为ID存储在SQL中。

我已经尝试过:

<html>
 <body>

  <p id="hash-paragraph"></p>
  <input type="submit" name="hash-click" onclick="CreateHash()">

  <script>
   function CreateHash(){
     var randomhash = crypto.randomBytes(20).toString('hex');
     randomhash.id = "randomhash";
     document.getElementById("hash-paragraph").innerHTML = document.getElementById("randomhash").value;
   }
  </script> 
 </body>
</html>

我是否缺少某些行或var randomhash = crypto.randomBytes(20).toString('hex');是错误的方法?

先谢谢您。

javascript html hash
1个回答
0
投票

Web Crypto API标准中没有randomBytes方法。这是仅在加密NodeJS模块上可用的方法。在这种情况下,等效值为crypto.getRandomValues()MDN提供了有关它的更多信息。

编辑:crypto.getRandomValues()方法,需要TypedArray作为参数,以将其熵值反馈给它。我附上CodePen example,显示如何生成并将其转换为适合您需要的十六进制格式。


0
投票

如果您想基本获取某些文本的SHA256,也许下面的内容会有所帮助。

键入文本区域,在其下方将显示SHA256值。

const ta = document.querySelector('textarea');
const rr = document.querySelector('[data-id=the-hash]');

const buf2hex = (buffer) =>
  Array.prototype.map.call(new Uint8Array(buffer),
  x => ('00' + x.toString(16)).slice(-2)).join('');

async function hashTextArea() {
  rr.innerText = Math.random();
  const x = await crypto.subtle.digest(
    'SHA-256', 
    (new TextEncoder()).encode(ta.value));
  rr.innerText = buf2hex(x);
}

ta.addEventListener('input', hashTextArea);

hashTextArea();
[data-id=the-hash] {
  font-size: 10pt;
}
textarea {
  width: 100%;
}
<textarea rows=5>
Hash me..
</textarea>
<div>hash below</div>
<div data-id="the-hash">?</div>
© www.soinside.com 2019 - 2024. All rights reserved.