計算檔案hash值(SHA1)
阿新 • • 發佈:2021-07-29
參考自https://www.jianshu.com/p/59a06a08efac
參考自
獲取到檔案物件後
//匯入 import CryptoJS from "crypto-js"; //上傳檔案觸發事件 uploadCrt(param) { let contractFile = param.file; let reader = new FileReader(), self = this; let blobSlice = File.prototype.mozSlice || File.prototype.webkitSlice || File.prototype.slice; let chunkSize = 10 * 1024 * 1024; let chunks = Math.ceil(contractFile.size / chunkSize); let currentChunk = 0; let hasher = CryptoJS.algo.SHA1.create(); console.log(`CryptoJS.algo.SHA1.create`, CryptoJS.algo.SHA1.create); let start = currentChunk * chunkSize; let end = start + chunkSize >= contractFile.size ? contractFile.size : start + chunkSize; reader.readAsArrayBuffer(blobSlice.call(contractFile, start, end)); reader.onload = function(evt) { let fileStr = evt.target.result; let tmpWordArray = self.arrayBufferToWordArray(fileStr); hasher.update(tmpWordArray); currentChunk += 1; fileStr = null; tmpWordArray = null; if (currentChunk < chunks) { let start = currentChunk * chunkSize; let end = start + chunkSize >= contractFile.size ? contractFile.size : start + chunkSize; reader.readAsArrayBuffer(blobSlice.call(contractFile, start, end)); } }; reader.onloadend = function() { contractFile = null; let hash = hasher.finalize(); hash.toString(); //計算結果 console.log( `hash.toString().length`, hash.toString() === "d6de0ccc33b360d5e04125b8d9e0f38962d10d08" ); // 可以百度或命令列‘線上計算hash檔案工具,然後將計算後的值與hash.tostring()的 值進行對比 SHA1生成的是40位的字串’ hasher = null; blobSlice = null; reader = null; hash = null; }; }, arrayBufferToWordArray(ab) { let i8a = new Uint8Array(ab); let a = []; for (let i = 0; i < i8a.length; i += 4) { a.push( (i8a[i] << 24) | (i8a[i + 1] << 16) | (i8a[i + 2] << 8) | i8a[i + 3] ); } return CryptoJS.lib.WordArray.create(a, i8a.length); },
//匯入 import CryptoJS from "crypto-js"; getHash(file){ let reader = new FileReader(); // 讀取檔案 file reader.readAsArrayBuffer(file); reader.onload = function () { var wordArray = CryptoJS.lib.WordArray.create(reader.result); var hash = CryptoJS.SHA1(wordArray).toString(); // 計算其他加密演算法,SHA1改為MD5、SHA256即可 console.log('hash:', hash) }; }
本文非原創,在作者的基礎上根據自己需求做了修改
以上。
作者:致愛麗絲 出處:https://www.cnblogs.com/hjk1124/ 本文版權歸作者和部落格園共有,歡迎轉載,但必須在文章頁面給出原文連結並標名原文作者,否則保留追究法律責任的權利。