gpt4 book ai didi

javascript - 如何使用 Web Crypto API 创建哈希?

转载 作者:行者123 更新时间:2023-12-04 14:55:22 24 4
gpt4 key购买 nike

我正在尝试在客户端创建 SHA-1 哈希。我正在尝试使用 Web Crypto API 执行此操作,但是当我将输出与各种在线工具给我的输出进行比较时,结果完全不同。我认为问题出在 ArrayBuffer 到 Hex 的转换中。这是我的代码:

function generateHash() {
var value = "mypassword";
var crypto = window.crypto;
var buffer = new ArrayBuffer(value);
var hash_bytes = crypto.subtle.digest("SHA-1", buffer);
hash_bytes.then(value => document.write([...new Uint8Array(value)].map(x => x.toString(16).padStart(2, '0')).join('')));
}

document.write 的输出应该是:

91dfd9ddb4198affc5c194cd8ce6d338fde470e2

但它不是,我得到了一个完全不同的不同长度的散列(应该是 40)。我可以就这个问题提出一些建议吗?谢谢。

最佳答案

问题似乎更多是从字符串到ArrayBuffer 的输入转换。例如。与 str2ab()代码有效:

generateHash();

function generateHash() {
var value = "mypassword";
var crypto = window.crypto;
var buffer = str2ab(value); // Fix
var hash_bytes = crypto.subtle.digest("SHA-1", buffer);
hash_bytes.then(value => document.write([...new Uint8Array(value)].map(x => x.toString(16).padStart(2, '0')).join('')));
}

// https://stackoverflow.com/a/11058858
function str2ab(str) {
const buf = new ArrayBuffer(str.length);
const bufView = new Uint8Array(buf);
for (let i = 0, strLen = str.length; i < strLen; i++) {
bufView[i] = str.charCodeAt(i);
}
return buf;
}

预期输出:

91dfd9ddb4198affc5c194cd8ce6d338fde470e2

关于javascript - 如何使用 Web Crypto API 创建哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68141513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com