使用(SHA-256)为每个分块生成唯一标识(如 文件哈希 + 分块序号)。
SHA-256是一种广泛使用的加密哈希函数,它将输入数据转换为一个固定大小的哈希值。
Web CryptoAPI是浏览器原生支持的加密API, 支持SHA-256等哈希算法,性能极佳(通常比 CryptoJS 快10倍以上)优化建议
优点
✅ 性能极佳(浏览器原生优化,支持硬件加速)。
✅ API 简单,无需额外依赖。
✅ 支持流式计算(大文件可直接读取 ArrayBuffer)。
缺点
❌ 兼容性:仅支持现代浏览器(IE 不支持)。
❌ 同步限制:crypto.subtle.digest 必须是 async/await 或 Promise 调用。
Web Crypto API转换
constcalculateBlobHashNative=async(blob,algorithm='SHA-256')=>{conststartTime=performance.now();try{constarrayBuffer=awaitblob.arrayBuffer();consthashBuffer=awaitcrypto.subtle.digest(algorithm,arrayBuffer);consthashArray=Array.from(newUint8Array(hashBuffer));consthexHash=hashArray.map((b)=>b.toString(16).padStart(2,'0')).join('');constendTime=performance.now();console.log(`原生 API 总耗时:${(endTime-startTime).toFixed(2)}ms`);returnhexHash;}catch(error){console.error('使用原生 API 计算哈希时出错:',error);throwerror;}};constexampleUsage=async(blob)=>{// 创建一个示例 Blob(在实际应用中,这可能是用户上传的文件)// const text = '这是一个测试文件内容,用于演示如何计算 Blob 的哈希值。';// const blob = new Blob([text], { type: 'text/plain' });console.log('计算得到的哈希值判断:',blobinstanceofBlob,blob.size/1024/1024,'mb');try{consthash=awaitthis.calculateBlobHashNative(blob);console.log('计算得到的哈希值:',hash);}catch(error){console.error('示例使用出错:',error);}};