簡介
MD5(Message-Digest Algorithm)是計算機安全領(lǐng)域廣泛使用的散列函數(shù)(又稱哈希算法、摘要算法),主要用來確保消息的完整和一致性。常見的應用場景有密碼保護、下載文件校驗等。
本文先對MD5的特點與應用進行簡要概述,接著重點介紹MD5在密碼保護場景下的應用,最后通過例子對MD5碰撞進行簡單介紹。
特點
運算速度快:對
jquery.js
求md5值,57254個字符,耗時1.907ms輸出長度固定:輸入長度不固定,輸出長度固定(128位)。
運算不可逆:已知運算結(jié)果的情況下,無法通過通過逆運算得到原始字符串。
高度離散:輸入的微小變化,可導致運算結(jié)果差異巨大。
弱碰撞性:不同輸入的散列值可能相同。
應用場景
文件完整性校驗:比如從網(wǎng)上下載一個軟件,一般網(wǎng)站都會將軟件的md5值附在網(wǎng)頁上,用戶下載完軟件后,可對下載到本地的軟件進行md5運算,然后跟網(wǎng)站上的md5值進行對比,確保下載的軟件是完整的(或正確的)
密碼保護:將md5后的密碼保存到數(shù)據(jù)庫,而不是保存明文密碼,避免拖庫等事件發(fā)生后,明文密碼外泄。
防篡改:比如數(shù)字證書的防篡改,就用到了摘要算法。(當然還要結(jié)合數(shù)字簽名等手段)
nodejs中md5運算的例子
在nodejs中,crypto
模塊封裝了一系列密碼學相關(guān)的功能,包括摘要運算?;A例子如下,非常簡單:
var crypto = require('crypto');var md5 = crypto.createHash('md5');var result = md5.update('a').digest('hex');// 輸出:0cc175b9c0f1b6a831c399e269772661console.log(result);