// worker.js import {Sha256} from "@aws-crypto/sha256-js"; import SparkMD5 from "spark-md5"; onmessage = async function (event) { const data = event.data; // chunk方式读取文件 const chunkSize = 1024 * 1024; // 每次读取1MB const fileSize = data.size; let offset = 0; const hash = new Sha256(); const spark = new SparkMD5.ArrayBuffer(); while (offset < fileSize) { const chunk = data.slice(offset, offset + chunkSize); const buffer = await chunk.arrayBuffer(); hash.update(buffer); spark.append(buffer); offset += chunkSize; console.log(offset / fileSize * 100 , '%'); } const sha256Value = await hash.digest(); const buffer = Array.from(new Int8Array(sha256Value)); const md5Value = spark.end(); const md5Buffer = Array.from(new Int8Array(md5Value)); console.log(sha256Value, buffer); // 输出文件的sha256值 console.log(md5Value, md5Buffer); // 输出文件的MD5值 postMessage(buffer); };优化代码计算sah3
时间: 2024-01-16 07:05:02 浏览: 21
要计算 SHA-3 值,可以使用 Web Crypto API 中的 SubtleCrypto.digest() 方法,类似于计算 SHA-256 值的方法。具体来说,可以这样修改代码:
```
onmessage = async function (event) {
const data = event.data;
const chunkSize = 1024 * 1024; // 每次读取1MB
const fileSize = data.size;
let offset = 0;
const hash = await crypto.subtle.digest('SHA-3-256');
while (offset < fileSize) {
const chunk = data.slice(offset, offset + chunkSize);
const buffer = await chunk.arrayBuffer();
await crypto.subtle.digest('SHA-3-256', buffer);
offset += chunkSize;
console.log(offset / fileSize * 100 , '%');
}
const sha3Value = new Uint8Array(hash);
const buffer = Array.from(sha3Value);
console.log(sha3Value, buffer); // 输出文件的sha3值
postMessage(buffer);
};
```
其中,`crypto.subtle.digest()` 方法的第一个参数为要计算的哈希算法,本例中为 'SHA-3-256',返回的结果同样为一个 Promise,需要将其转换为 Uint8Array 后才能得到最终的值。