javascript - 使用 Forge 对二进制数据进行 SHA256 哈希
问题描述
我想使用Forge创建一个 SHA256 哈希。我的测试使用文件中的二进制数据"\x01\x02\x03\x04\x05\x06\x07\x08"
。这会在 Linux shell 上使用 sha256sum 生成 SHA256:
66840dda154e8a113c31dd0ad32f7f3a366a80e8136979d8f5a101d3d29d6f72
然后我使用 Web Crypto API ( crypto.subtle.digest()
) 来计算哈希。我在这里使用 Uint8Array 中的 ArrayBuffer。仍然可以,计算相同的哈希:
let data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);
const digest = await crypto.subtle.digest('SHA-256', data.buffer);
const array = Array.from(new Uint8Array(digest));
const hex = array.map(byte => ('00' + byte.toString(16)).slice(-2)).join('');
// 66840dda154e8a113c31dd0ad32f7f3a366a80e8136979d8f5a101d3d29d6f72
现在我想使用 Forge 库来计算哈希,但我无法让它产生正确的哈希:
let data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);
const md = forge.md.sha256.create();
md.update(data);
let hex = md.digest().toHex();
// 181e2276640163cbb29a50fa846412edb6489b3c73e82ca4b64ae114b752a542
let data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);
const md = forge.md.sha256.create();
let buffer = forge.util.createBuffer(data);
md.update(buffer);
let hex = md.digest().toHex();
// 1d4e1124c22199ab44fc3acb57e2f68f18bee390d8a52d62b15c23d3fc157846
如何使用 Forge 从二进制数据创建 SHA256 哈希?
解决方案
好的,我在 Github 上的一个问题中找到了解决方案:
let data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);
const md = forge.md.sha256.create();
let buffer = String.fromCharCode.apply(null, data); // <-- HERE
md.update(buffer);
let hex = md.digest().toHex();
// 66840dda154e8a113c31dd0ad32f7f3a366a80e8136979d8f5a101d3d29d6f72
推荐阅读
- android - 通过 ms-outlook://emails/ URI 方案打开收到的电子邮件
- amazon-s3 - 获取对 AWS S3 存储桶的 AJAX 请求的 CORS 错误
- python - 如何在进程运行时显示带有说明性文本的 QDialog 框
- docker - Kubernetes 仪表板无法访问节点,GUI 中断
- spring-cloud-stream - Micronaut 的 Spring Cloud Stream 替代方案
- c++ - 错误:- main.cpp:11:19:错误:push_back 行中没有匹配的调用函数
- delphi - 我不知道该怎么做 通过 Delphi 在 Google Calendar API 中插入日历
- python - SIGINT 在 python 中本质上是不可靠的吗?
- google-sheets - discord.py - 通过 ID 提及不显示名称
- android - 回收站视图不使用领域数据更新数据