MD5 是什麼?
《轉貼自 石頭閒語》
簡單地說, MD5 是一種單向字串雜湊演算 (hashing) ,其可將你所給予的任何長度字串, 使用 MD5 雜湊演算法,得出一個長度為 128 位元 ( 16 個字元) 的計算結果, 以下以鍵值稱之。
舉例來說,你將 "ROCK" 這個字串,使用 MD5 演算的話,就會得到一個 128 位元的計算結果,以字串型式表示的話,則如同下行:
MD5 ("ROCK") = afeb717aa2a101f7f64840e0be38c171
用字串表示時,是把 128 位元的計算結果 (術語稱之為 "digest code") ,轉成十六進位碼形式的字串,此字串需要 32 個字元空間 (即 256 位元)。
MD5 的其他說明條列如下:
固定的字串內容必定會得出一個固定的鍵值,而非每次都算出不同的。
這是一個單向的雜湊演算,意味著,它雖可每次都將同樣的字串內容,算 出同樣的鍵值,但它無法從鍵值反推算出原本的字串內容。
不同字串內容所演算出來的鍵值,有可能相同,但根據統計,重覆的機率小於百萬分之一,以重覆率來說,是相當好的演算法。
演算速度快,對硬體的要求很低。
它可以演算任意長度的字串內容,而且能得出固定長度的鍵值。
就算字串內容只相差一個字,它也能算出完全不同的鍵值。
鍵值長達 128 位元,而且可接受任何長度的字串,就密碼的安全性來講,比過去常用的 DES 編碼法還好。 DES 編碼法,只能接受 8 個字元長度的字串,產生的鍵值只有 56 位元。
就最後兩項,舉個例子來驗證,如下:
MD5 ("ROCK") = afeb717aa2a101f7f64840e0be38c171
MD5 ("RACK") = 1ece4bad0efe8b897c6e7f8bd101759f
MD5 ("ROCKY") = 6cd910740cbbbbd0f55238a93fba157d
MD5 ("Rock'S saying") = 7dca0df0dfa7f76b652e53daa4852640
最後要提的是, MD5 演算法,是由 RSA Data Security, Inc 公司所提出的。
如何取得 MD5 函數庫
本人使用的 MD5 函數庫,是取自 RSA Data Security 公司網站上,提供公開下載的版本,它只提供 C 語言原始碼,不過不必擔心編譯的問題,根據我的測試,只要是 32位元的 C 語言編譯器,都可以順利編譯,也沒有作業系統平台的問題。
Ps. 我試過 gcc (win32, linux 及 freebsd) 及 borland c++ 5.0 (win32)
可以點取下列連結下載:
RSA Data Security, Inc.
我略做整理的原始碼
此外,在某些作業系統中,例如 Freebsd ,由於內定採用 MD5 作為帳號密碼的編碼演算法,因此在系統中已內建 MD5 函數庫,不須另外安裝。
當你取得 RSA 的 MD5 原始碼後,可以直接 make ,如果一切順利,就會得到一個名叫 md5 的工具,這個工具,可以用來演算指定的檔案內容或特定字串的鍵值。
這個工具非常好用,我略加說明使用方式。
如果你是要演算檔案內容的鍵值,只要在指令 md5 後,直接加上檔案名稱做為參數即可,例如: md5 abc.zip ..
訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容