0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

md5的算法步驟及應(yīng)用

姚小熊27 ? 來源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2020-11-16 16:01 ? 次閱讀

md5的算法步驟

按位補(bǔ)充數(shù)據(jù)

在MD5算法中,首先需要對信息進(jìn)行填充,這個數(shù)據(jù)按位(bit)補(bǔ)充,要求最終的位數(shù)對512求模的結(jié)果為448。也就是說數(shù)據(jù)補(bǔ)位后,其位數(shù)長度只差64位(bit)就是512的整數(shù)倍。即便是這個數(shù)據(jù)的位數(shù)對512求模的結(jié)果正好是448也必須進(jìn)行補(bǔ)位。補(bǔ)位的實(shí)現(xiàn)過程:首先在數(shù)據(jù)后補(bǔ)一個1 bit; 接著在后面補(bǔ)上一堆0 bit, 直到整個數(shù)據(jù)的位數(shù)對512求模的結(jié)果正好為448??傊辽傺a(bǔ)1位,而最多可能補(bǔ)512位 。

擴(kuò)展長度

在完成補(bǔ)位工作后,又將一個表示數(shù)據(jù)原始長度的64 bit數(shù)(這是對原始數(shù)據(jù)沒有補(bǔ)位前長度的描述,用二進(jìn)制來表示)補(bǔ)在最后。當(dāng)完成補(bǔ)位及補(bǔ)充數(shù)據(jù)的描述后,得到的結(jié)果數(shù)據(jù)長度正好是512的整數(shù)倍。也就是說長度正好是16個(32bit) 字的整數(shù)倍 。

初始化MD緩存器

MD5運(yùn)算要用到一個128位的MD5緩存器,用來保存中間變量和最終結(jié)果。該緩存器又可看成是4個32位的寄存器A、B、C、D,初始化為 :

A : 01 23 45 67

B: 89 ab cd ef

C: fe dc ba 98

D: 76 54 32 10

處理數(shù)據(jù)段

首先定義4個非線性函數(shù)F、G、H、I,對輸入的報文運(yùn)算以512位數(shù)據(jù)段為單位進(jìn)行處理。對每個數(shù)據(jù)段都要進(jìn)行4輪的邏輯處理,在4輪中分別使用4個不同的函數(shù)F、G、H、I。每一輪以ABCD和當(dāng)前的512位的塊為輸入,處理后送入ABCD(128位)。

輸出

信息摘要最終處理成以A, B, C, D 的形式輸出。也就是開始于A的低位在前的順序字節(jié),結(jié)束于D的高位在前的順序字節(jié)。

md5應(yīng)用

用于密碼管理

當(dāng)我們需要保存某些密碼信息以用于身份確認(rèn)時,如果直接將密碼信息以明碼方式保存在數(shù)據(jù)庫中,不使用任何保密措施,系統(tǒng)管理員就很容易能得到原來的密碼信息,這些信息一旦泄露, 密碼也很容易被破譯。為了增加安全性,有必要對數(shù)據(jù)庫中需要保密的信息進(jìn)行加密,這樣,即使有人得到了整個數(shù)據(jù)庫,如果沒有解密算法,也不能得到原來的密碼信息。MD5算法可以很好地解決這個問題,因為它可以將任意長度的輸入串經(jīng)過計算得到固定長度的輸出,而且只有在明文相同的情況下,才能等到相同的密文,并且這個算法是不可逆的,即便得到了加密以后的密文,也不可能通過解密算法反算出明文。這樣就可以把用戶的密碼以MD5值(或類似的其它算法)的方式保存起來,用戶注冊的時候,系統(tǒng)是把用戶輸入的密碼計算成 MD5 值,然后再去和系統(tǒng)中保存的 MD5 值進(jìn)行比較,如果密文相同,就可以認(rèn)定密碼是正確的,否則密碼錯誤。通過這樣的步驟,系統(tǒng)在并不知道用戶密碼明碼的情況下就可以確定用戶登錄系統(tǒng)的合法性。這樣不但可以避免用戶的密碼被具有系統(tǒng)管理員權(quán)限的用戶知道,而且還在一定程度上增加了密碼被破解的難度。

電子簽名

MD5 算法還可以作為一種電子簽名的方法來使用,使用 MD5算法就可以為任何文件(不管其大小、格式、數(shù)量)產(chǎn)生一個獨(dú)一無二的“數(shù)字指紋”,借助這個“數(shù)字指紋”,通過檢查文件前后 MD5 值是否發(fā)生了改變,就可以知道源文件是否被改動。我們在下載軟件的時候經(jīng)常會發(fā)現(xiàn),軟件的下載頁面上除了會提供軟件的下載地址以外,還會給出一串長長的字符串。這串字符串其實(shí)就是該軟件的MD5 值,它的作用就在于下載該軟件后,對下載得到的文件用專門的軟件(如 Windows MD5 check 等)做一次 MD5 校驗,以確保我們獲得的文件與該站點(diǎn)提供的文件為同一文件。利用 MD5 算法來進(jìn)行文件校驗的方案被大量應(yīng)用到軟件下載站、論壇數(shù)據(jù)庫、系統(tǒng)文件安全等方面 。

垃圾郵件篩選

在電子郵件使用越來越普遍的情況下,可以利用 MD5 算法在郵件接收服務(wù)器上進(jìn)行垃圾郵件的篩選,以減少此類郵件的干擾,具體思路如下:

建立一個郵件 MD5 值資料庫,分別儲存郵件的 MD5 值、允許出現(xiàn)的次數(shù)(假定為 3)和出現(xiàn)次數(shù)(初值為零)。

對每一封收到的郵件,將它的正文部分進(jìn)行MD5 計算,得到 MD5 值,將這個值在資料庫中進(jìn)行搜索。

如未發(fā)現(xiàn)相同的 MD5 值,說明此郵件是第一次收到,將此 MD5 值存入資料庫,并將出現(xiàn)次數(shù)置為1,轉(zhuǎn)到第五步。

如發(fā)現(xiàn)相同的 MD5 值,說明收到過同樣內(nèi)容的郵件,將出現(xiàn)次數(shù)加 1,并與允許出現(xiàn)次數(shù)相比較,如小于允許出現(xiàn)次數(shù),就轉(zhuǎn)到第五步。否則中止接收該郵件。結(jié)束。

接收該郵件。
責(zé)任編輯:YYX

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4622

    瀏覽量

    93054
  • md5
    md5
    +關(guān)注

    關(guān)注

    0

    文章

    29

    瀏覽量

    20887
收藏 人收藏

    評論

    相關(guān)推薦

    PostgreSQL將不再支持MD5密碼

    根據(jù) PostgreSQL 代碼倉庫的最新動態(tài),近日有維護(hù)者提交了“棄用 MD5 密碼支持”的 commit。 該維護(hù)者指出,MD5 被認(rèn)為不適合用作加密散列算法已有一段時間。 此外
    的頭像 發(fā)表于 12-10 16:14 ?151次閱讀

    開源物聯(lián)網(wǎng)技術(shù)--哈希算法MD5加密功能技術(shù)分享

    MD5(Message-Digest Algorithm 5)是一種常用的哈希函數(shù),通常用于數(shù)據(jù)加密和安全校驗等場合。MD5 算法可以將任意長度的消息輸入計算出一個固定長度的摘要,其生
    的頭像 發(fā)表于 09-21 09:57 ?1780次閱讀
    開源物聯(lián)網(wǎng)技術(shù)--哈希<b class='flag-5'>算法</b><b class='flag-5'>MD5</b>加密功能技術(shù)分享

    第三章:龍芯2K0300蜂鳥板資料分析

    |--u-boot-with-spl.bin.md5u boot bin md5格式文件
    發(fā)表于 09-11 17:47

    嵌入式學(xué)習(xí)-Ubuntu系統(tǒng)安裝之使用提供的ubuntu系統(tǒng)

    環(huán)境文件夾中有以下文件:為了保證開發(fā)環(huán)境在下載過程中沒有出現(xiàn)文件損壞,下載完后要對每一個文件進(jìn)行MD5校驗(可以通過網(wǎng)絡(luò)進(jìn)行MD5在線校驗,也可以下載MD5校驗工具),文件校驗完生成的校驗碼與資料
    發(fā)表于 08-09 15:40

    Ubuntu系統(tǒng)安裝之使用提供的ubuntu系統(tǒng)

    環(huán)境文件夾中有以下文件:為了保證開發(fā)環(huán)境在下載過程中沒有出現(xiàn)文件損壞,下載完后要對每一個文件進(jìn)行MD5校驗(可以通過網(wǎng)絡(luò)進(jìn)行MD5在線校驗,也可以下載MD5校驗工具),文件校驗完生成的校驗碼與資料
    發(fā)表于 08-08 11:00

    ESP8266上加載micropython,文件的MD5與閃存中的數(shù)據(jù)不匹配怎么解決?

    ESP8266 上加載 micropython,文件的 MD5 與閃存中的數(shù)據(jù)不匹配!
    發(fā)表于 07-19 08:08

    ESP8266 MD5怎么使用?

    ROM 中有一些 MD5 功能 提供 ( MD5Final = 0x40009900 ); 提供 ( MD5Init = 0x40009818 ); 提供 ( MD5Update =
    發(fā)表于 07-10 07:35

    idf.py下載程序,MD5不匹配導(dǎo)致下載失敗怎么解決?

    in 0.0 seconds (effective 4491.3 kbit/s)... Filemd5: 5d61d196adc3dba01928f264eb169be7 Flash md5
    發(fā)表于 06-24 08:38

    esp32燒錄flash時md5驗證錯誤,導(dǎo)致不能燒錄要怎么處理?

    md5: 2f96fdc5a8d3d8229c2036f90ce59db6 MD5 of 0xFF is bf962a57871258e1e226c47e04f2a18b A fatal error
    發(fā)表于 06-24 06:28

    ESP32-Sense Kit idf4.3下載固件md5報錯如何解決?

    買的ESP32-Sense Kit,下載固件時出現(xiàn)md5錯誤,下載器是附帶的jtag,請問該如何解決?
    發(fā)表于 06-20 08:14

    ESP32-WROOM-32D無法寫入flash,MD5檢驗錯誤:MD5 of file does not match data in flash怎么解決?

    kbit/s)... Filemd5: b181f1484c264652f0f20d506db35eca Flash md5: 4c03feeb3298a10ad0ea93ed8c09925b MD5
    發(fā)表于 06-20 07:14

    esp32如何先將OAT下來的固件進(jìn)行sha256或者MD5校驗,再寫入相應(yīng)的flash區(qū)域?

    esp32如何先將OAT下來的固件進(jìn)行sha256或者MD5校驗,再寫入相應(yīng)的flash區(qū)域,OAT下來的固件先放在哪里?
    發(fā)表于 06-07 07:53

    Linux中文件MD5校驗方法

    由于生成的md5信息中,每個md5值后都緊跟著對應(yīng)的文件的路徑(可能是相對路徑),于是將生成的md5保存到某個文件中,以后可以使用該文件來檢查md5值對應(yīng)文件內(nèi)容是否發(fā)生了修改。
    發(fā)表于 04-22 12:40 ?702次閱讀

    stm32寫B(tài)ootLoader程序遇到的幾個問題求解

    我最近在寫一個BootLoader程序,以前沒有接觸過md5和mbedtls,有些疑問?,F(xiàn)在我需要使用md5校驗文件完整性,但是官方的md5庫需要依賴mbedtls庫,mbedtls庫必須
    發(fā)表于 03-28 07:48

    如何對MD5加密算法優(yōu)化?

    有人針對程序安全啟動過程,進(jìn)行MD5算法的優(yōu)化嘛。目前采用標(biāo)準(zhǔn)算法,時間稍長,如果有人做過優(yōu)化的話,可以分享一下,謝謝。
    發(fā)表于 02-18 08:20