1. 程式人生 > 其它 >計算檔案hash值(SHA1)

計算檔案hash值(SHA1)

參考自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/ 本文版權歸作者和部落格園共有,歡迎轉載,但必須在文章頁面給出原文連結並標名原文作者,否則保留追究法律責任的權利。