TypeScript與JavaScript項(xiàng)目里引入MD5校驗(yàn)和
一、什么是MD5校驗(yàn)和?
MD5,是Message Digest Algorithm 5的縮寫,即消息摘要算法版本5。
消息摘要算法通過對(duì)所有數(shù)據(jù)提取指紋信息以實(shí)現(xiàn)數(shù)據(jù)簽名、數(shù)據(jù)完整性校驗(yàn)等功能,由于其不可逆性,有時(shí)候會(huì)被用做敏感信息的加密。消息摘要算法也被稱為哈希(Hash)算法或散列算法。任何消息經(jīng)過散列函數(shù)處理后,都會(huì)獲得唯一的散列值,這一過程稱為 “消息摘要”,其散列值稱為 “數(shù)字指紋”,其算法自然就是 “消息摘要算法”了。換句話說,如果其數(shù)字指紋一致,就說明其消息是一致的。
至于MD5校驗(yàn)和則是其中一種數(shù)學(xué)算法,通常是使用工具對(duì)文件計(jì)算得出的一組32 個(gè)字符的十六進(jìn)制字母和數(shù)字(通過對(duì)任意長(zhǎng)度的信息逐位進(jìn)行計(jì)算,產(chǎn)生一個(gè)二進(jìn)制長(zhǎng)度為128位(十六進(jìn)制長(zhǎng)度就是32位)的 hash 值)。 這些數(shù)字是使用專用工具生成的,這些工具利用了“生成128 位(16 字節(jié))哈希值的加密哈希函數(shù)”。
MD5校驗(yàn)和可以用于驗(yàn)證網(wǎng)絡(luò)文件傳輸?shù)耐暾砸约胺乐刮募蝗舜鄹摹?/p>
二、MD5校驗(yàn)和的優(yōu)點(diǎn)和漏洞
MD5 特點(diǎn):
- 穩(wěn)定、運(yùn)算速度快。
- 壓縮性:輸入任意長(zhǎng)度的數(shù)據(jù),輸出長(zhǎng)度固定(128 比特位)。
- 運(yùn)算不可逆:已知運(yùn)算結(jié)果的情況下,無法通過逆運(yùn)算得到原始字符串。
- 高度離散:輸入的微小變化,可導(dǎo)致運(yùn)算結(jié)果差異巨大。
MD5 漏洞:
隨著計(jì)算機(jī)技術(shù)的發(fā)展和計(jì)算水平的不斷提高,MD5 算法暴露出來的漏洞也越來越多。1996 年后被證實(shí)存在弱點(diǎn),可以被加以破解,對(duì)于需要高度安全性的數(shù)據(jù),專家一般建議改用其他算法,如 SHA-2。2004 年,證實(shí) MD5 算法無法防止碰撞(collision),因此不適用于安全性認(rèn)證,如 SSL 公開密鑰認(rèn)證或是數(shù)字簽名等用途。
但是對(duì)于驗(yàn)證網(wǎng)絡(luò)文件傳輸?shù)耐暾砸约胺乐刮募蝗舜鄹牡墓δ?,還是綽綽有余的。
三、如何在TS項(xiàng)目里引入MD5校驗(yàn)和?
首先我們?nèi)ロ?xiàng)目的terminal框內(nèi),在項(xiàng)目目錄底下,輸入命令$npm install ts-md5 --save去下載 (命令–save會(huì)幫助npm在下載ts-md5包的時(shí)候,把所有下載下來的核心包保存到package.json文件里依賴部分里):
package.json文件里新添依賴:
npm里關(guān)于ts-md5的介紹:
然后在項(xiàng)目代碼里需要用到md5的地方,引入MD5文件:
import {Md5} from 'ts-md5/dist/md5';
四、MD5校驗(yàn)的使用
如何去hash一些字符串內(nèi)容呢?有如下幾種用法,=>后面的是hash之后內(nèi)容的格式:
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)
更復(fù)雜點(diǎn)的用法:
//先聲明一個(gè)Md5對(duì)象 md5 = new Md5(); // 可以鏈?zhǔn)降丶由闲枰ash的內(nèi)容 // 內(nèi)容格式可以是:字符串,Ascii字符串,Blob(Binary Large Object)即二進(jìn)制類型的大對(duì)象 md5.appendStr('somestring') ? ? .appendAsciiStr('a different string') ? ? .appendByteArray(blob); // 生成MD5-16進(jìn)制字符串,然后結(jié)束md5 md5.end();
Hash
一個(gè)文件(注意:我們得確認(rèn)ts-md5/dist/md5_worker.js文件是在build里面可用的,那么我們?cè)谛枰臅r(shí)候可以直接使用。這個(gè)文件存在的形式需要一直保持為單獨(dú)的狀態(tài)):
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); });
五、另一個(gè)npm依賴包的使用方法
我們還可以使用另一個(gè)npm里的依賴包md5-file 專門對(duì)文件進(jìn)行MD5求值。
使用方法,去項(xiàng)目的terminal
框內(nèi),在項(xiàng)目目錄底下,輸入命令$npm install --save md5-file
去下載。
使用方法:
注:
針對(duì)JS項(xiàng)目里的流式下載,并不僅僅是https.get(requestUrl)
下載完之后,就真的下載完了;我們還需要對(duì)const stream =
fs.createWriteStream(toolsPath)
;這個(gè)stream常量進(jìn)行檢測(cè),看是否是finish狀態(tài)了。
當(dāng)https.get是end狀態(tài)和stream是finish狀態(tài)的時(shí)候,我們才可以說所有下載都完成了;此時(shí)才可以進(jìn)行MD5值的校驗(yàn)。
到此這篇關(guān)于TypeScript
與JavaScript
項(xiàng)目里引入MD5校驗(yàn)和的文章就介紹到這了,更多相關(guān)TypeScript與JavaScript項(xiàng)目里引入MD5校驗(yàn)和內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于canvas實(shí)現(xiàn)的鐘擺效果完整實(shí)例
這篇文章主要介紹了基于canvas實(shí)現(xiàn)的鐘擺效果,以完整實(shí)例形式分析了JavaScript結(jié)合html5的canvas技術(shù)實(shí)現(xiàn)鐘擺動(dòng)態(tài)旋轉(zhuǎn)效果的方法,需要的朋友可以參考下2016-01-01JavaScript中的console.dir()函數(shù)介紹
這篇文章主要介紹了JavaScript中的console.dir()函數(shù)介紹,console.dir主要用來dump某些對(duì)象的詳細(xì)信息,需要的朋友可以參考下2014-12-12JavaScript調(diào)試常見報(bào)錯(cuò)及原因分析
這篇文章主要介紹了JavaScript調(diào)試常見報(bào)錯(cuò)及原因分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04如何設(shè)置一定時(shí)間內(nèi)只能發(fā)送一次請(qǐng)求
這篇文章主要介紹了如何設(shè)置一定時(shí)間內(nèi)只能發(fā)送一次請(qǐng)求,需要的朋友可以參考下2014-02-02js實(shí)現(xiàn)滾動(dòng)條自動(dòng)滾動(dòng)到最底部示例代碼
這篇文章主要給大家介紹了關(guān)于js實(shí)現(xiàn)滾動(dòng)條自動(dòng)滾動(dòng)到最底部的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-06-06回車直接實(shí)現(xiàn)點(diǎn)擊某按鈕的效果即觸發(fā)單擊事件
這篇文章主要介紹了回車直接實(shí)現(xiàn)點(diǎn)擊某按鈕的效果即觸發(fā)單擊事件,需要的朋友可以參考下2014-02-02javascript實(shí)現(xiàn)鼠標(biāo)放上后下邊對(duì)應(yīng)內(nèi)容變換的效果
這篇文章主要介紹了javascript鼠標(biāo)放上后下邊對(duì)應(yīng)內(nèi)容變換的方法,實(shí)例分析了javascript實(shí)現(xiàn)tab切換的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08