STM32 基礎系列教程 47 - MD5

前言

    MD5消息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數,可以產生出一個128位(16字節)的散列值(hash value),用於確保信息傳輸完整一致。MD5由美國密碼學家羅納德·李維斯特(Ronald Linn Rivest)設計,於1992年公開,用以取代MD4算法。1991年,Rivest開發出技術上更爲趨近成熟的md5算法。它在MD4的基礎上增加了"安全-帶子"(safety-belts)的概念。雖然MD5比MD4複雜度大一些,但卻更爲安全。這個算法很明顯的由四個和MD4設計有少許不同的步驟組成。在MD5算法中,信息-摘要的大小和填充的必要條件與MD4完全相同。Den boer和Bosselaers曾發現MD5算法中的假衝突(pseudo-collisions),但除此之外就沒有其他被發現的加密後結果了。

目前MD5廣泛應用於一致性驗證同,數字簽名,安全訪問認證等用途

對MD5算法簡要的敘述可以爲:MD5以512位分組來處理輸入的信息,且每一分組又被劃分爲16個32位子分組,經過了一系列的處理後,算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值。 總體流程如下圖所示, 表示第i個分組,每次的運算都由前一輪的128位結果值和第i塊512bit值進行運算:

好了,下面開始進入正題。

 

 

示例詳解

基於硬件平臺: 正點源子的stm32f4 探索者開發板,MCU 的型號是 STM32F4ZET6, 使用stm32cubemx 工具自動產生的配置工程,使用KEIL5編譯代碼。本示例所用的開發板及部分原理圖:

https://www.eeboard.com/shop/data/uploads/2018/08/01/1533087371.jpg

 

    1. 關於CUBEMX工具及KEIL工具的操作將不再細講,如果還有不熟悉的可以查看之前的教程文檔。下面直接介紹工程配置:

 

      1. 系統時鐘樹

 

      1. 串口配置(用於程序調試)

 

      1. RCC配置

      1. SYS配置

 

      1. 引腳配置,用到引腳極少

      1. 堆棧配置(也可保持默認):

 

    1. 工程代碼
      1. 將事先準備好的MD5.c 文件加入工程,並將MD5.h文件放到工程INC文件夾下,這些文件可以在Lwip協議棧中提取,當然百度也能百度得到:

 

      1. 在main.c 中main函數中USER CODE BEGIN Includes、 USER CODE1、USER CODE 2, USER CODE 4 區域加入如下圖所示代碼:

   

 

 

 

c) 編譯工程,調試程序, (注:在使用探索者F4調試時,下載或仿真調試時先不要PC串口工具連接上開發板的USB_232接口,有可能導致程序運行不了--boot0引腳電平不對,可以先跑起來再在PC串口工具上連接相應端口!!,可按下面的具體操作步驟來操作—>>  )

 

串口已打開,程序全速運行(F5或單擊全速運行圖標)相看運行結果:

 

這個時候可以在串口中看到如下程序運行結果:

到此本次的MD5實驗就順利完成了,從本次實驗可以看到,MD5的算法使用還是比較簡單的,只需用到MD5Init,MD5Update和MD5Final三個接口即可,簡單方便。其中MD5Init爲初始化接口,MD5Update爲計算接口,MD5Final爲獲得結果接口。作爲MD5的使用,會用這三個接口即可。該工程算法可直接移植到M0,M3等其它內核心MCU同樣適用。

 

OK,本期實驗完成!下期見!同時如果大家有什麼疑問或是有想了解的其它內容,也歡迎大家留言!!最後喜歡這個公衆號的同學們記得加關注了,會有不定期技術乾貨推出!!

 

文中源碼資料下載,在公衆號裏給十三發消息:

下載|STM32基礎系列教程47

 

關注十三公衆號

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章