我需要将段落的'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');
是错误的方法?
先谢谢您。
Web Crypto API标准中没有randomBytes
方法。这是仅在加密NodeJS模块上可用的方法。在这种情况下,等效值为crypto.getRandomValues()
。 MDN提供了有关它的更多信息。
编辑:crypto.getRandomValues()
方法,需要TypedArray作为参数,以将其熵值反馈给它。我附上CodePen example,显示如何生成并将其转换为适合您需要的十六进制格式。
如果您想基本获取某些文本的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>