如何在TypeScript/JavaScript項目里引入MD5校驗和
- 2022 年 2 月 22 日
- 筆記
- javascript, md5, MD5校驗, npm, typescript, 程式設計師之家
摘要:MD5校驗和則是其中一種數學演算法,通常是使用工具對文件計算得出的一組32 個字元的十六進位字母和數字。
本文分享自華為雲社區《TypeScript/JavaScript項目里如何做MD5校驗和?》,作者: gentle_zhou。
什麼是MD5校驗和?
MD5,是Message Digest Algorithm 5的縮寫,即消息摘要演算法版本5。
消息摘要演算法通過對所有數據提取指紋資訊以實現數據簽名、數據完整性校驗等功能,由於其不可逆性,有時候會被用做敏感資訊的加密。消息摘要演算法也被稱為哈希(Hash)演算法或散列演算法。任何消息經過散列函數處理後,都會獲得唯一的散列值,這一過程稱為 「消息摘要」,其散列值稱為 「數字指紋」,其演算法自然就是 「消息摘要演算法」了。換句話說,如果其數字指紋一致,就說明其消息是一致的。
至於MD5校驗和則是其中一種數學演算法,通常是使用工具對文件計算得出的一組32 個字元的十六進位字母和數字(通過對任意長度的資訊逐位進行計算,產生一個二進位長度為128位(十六進位長度就是32位)的 hash 值)。 這些數字是使用專用工具生成的,這些工具利用了「生成128 位(16 位元組)哈希值的加密哈希函數」。
MD5校驗和可以用於驗證網路文件傳輸的完整性以及防止文件被人篡改。
MD5校驗和的優點和漏洞
MD5 特點:
- 穩定、運算速度快。
- 壓縮性:輸入任意長度的數據,輸出長度固定(128 比特位)。
- 運算不可逆:已知運算結果的情況下,無法通過逆運算得到原始字元串。
- 高度離散:輸入的微小變化,可導致運算結果差異巨大。
MD5 漏洞:
隨著電腦技術的發展和計算水平的不斷提高,MD5 演算法暴露出來的漏洞也越來越多。1996 年後被證實存在弱點,可以被加以破解,對於需要高度安全性的數據,專家一般建議改用其他演算法,如 SHA-2。2004 年,證實 MD5 演算法無法防止碰撞(collision),因此不適用於安全性認證,如 SSL 公開密鑰認證或是數字簽名等用途。
但是對於驗證網路文件傳輸的完整性以及防止文件被人篡改的功能,還是綽綽有餘的。
如何在TS項目里引入MD5校驗和?
首先我們去項目的terminal框內,在項目目錄底下,輸入命令$npm install ts-md5 –save去下載 (命令–save會幫助npm在下載ts-md5包的時候,把所有下載下來的核心包保存到package.json文件里依賴部分里):
package.json文件里新添依賴:
npm里關於ts-md5的介紹:
然後在項目程式碼里需要用到md5的地方,引入MD5文件:
import {Md5} from ‘ts-md5/dist/md5’;
MD5校驗的使用
如何去hash一些字元串內容呢?有如下幾種用法,=>後面的是hash之後內容的格式:
Md5.hashStr('blah blah blah') => hex:string Md5.hashStr('blah blah blah', true) => raw:Int32Array(4) Md5.hashAsciiStr('blah blah blah') => hex:string Md5.hashAsciiStr('blah blah blah', true) => raw:Int32Array(4)
更複雜點的用法:
//先聲明一個Md5對象 md5 = new Md5(); // 可以鏈式地加上需要去hash的內容 // 內容格式可以是:字元串,Ascii字元串,Blob(Binary Large Object)即二進位類型的大對象 md5.appendStr('somestring') .appendAsciiStr('a different string') .appendByteArray(blob); // 生成MD5-16進位字元串,然後結束md5 md5.end();
Hash一個文件(注意:我們得確認ts-md5/dist/md5_worker.js文件是在build裡面可用的,那麼我們在需要的時候可以直接使用。這個文件存在的形式需要一直保持為單獨的狀態):
import {ParallelHasher} from 'ts-md5/dist/parallel_hasher'; let hasher = new ParallelHasher('/path/to/ts-md5/dist/md5_worker.js'); hasher.hash(fileBlob).then(function(result) { console.log('md5 of fileBlob is', result); });
另一個npm依賴包的使用方法
我們還可以使用另一個npm里的依賴包md5-file 專門對文件進行MD5求值。
使用方法,去項目的terminal框內,在項目目錄底下,輸入命令$npm install –save md5-file去下載。
使用方法:
註:
針對JS項目里的流式下載,並不僅僅是https.get(requestUrl)下載完之後,就真的下載完了;我們還需要對const stream = fs.createWriteStream(toolsPath);這個stream常量進行檢測,看是否是finish狀態了。
當https.get是end狀態和stream是finish狀態的時候,我們才可以說所有下載都完成了;此時才可以進行MD5值的校驗。
參考鏈接
- //en.wikipedia.org/wiki/MD5)
- //stackoverflow.com/questions/37299630/how-to-generate-md5-hash-in-angular-2-typescript/38506339
- //www.semlinker.com/master-md5/
- //www.npmjs.com/package/ts-md5
- //www.npmjs.com/package/md5-file