最近連續(xù)幾個人反映STM32F4系列芯片的MD5結(jié)果問題,都反映在使用STM32F4的庫函數(shù)做MD5計算時得出的結(jié)果均為0,甚為迷惑不解。后來我發(fā)現(xiàn)網(wǎng)絡(luò)上也有這方面的咨詢,基本都沒有回復(fù)結(jié)果。
所謂MD5,它是Message Digest Algorithm MD5(中文名為消息摘要算法第五版)的簡稱。主要用于確保信息傳輸完整一致。是計算機或微處理器廣泛使用的雜湊算法之一(又稱摘要算法、哈希算法)。將數(shù)據(jù)(如各類文件信息)通過一系列運算后得出另一固定長度的信息,仿佛從原始信息中生成一部分摘要出來。MD5的前身還有MD2、MD3和MD4。
利用哈希算法生成MD5信息的大致原理就是對一堆原始信息經(jīng)過哈希算法后生成一個固定長度而并無規(guī)律的數(shù)據(jù)信息。這個信息可以用來檢測原始信息的完整性,進而達到保證原始信息的完整和安全性。
比如下載服務(wù)器針對一個文件預(yù)先提供一個MD5值,用戶下載完該文件后,用戶重新使用相同算法計算下載文件的MD5值,通過比較這兩個值是否相同,來判斷下載的文件是否出錯,或者說下載的文件是否被篡改了。再比方說用戶在銀行設(shè)置操作密碼,其實存進銀行系統(tǒng)的并不是你敲入的那幾個數(shù)字,而是根據(jù)輸入的密碼數(shù)字生成的類似MD5的數(shù)據(jù)信息,跟你鍵入的密碼數(shù)字并無直接的或有規(guī)律的關(guān)系。所以你不用擔(dān)心銀行工作人員通過內(nèi)部系統(tǒng)看到你輸入的是什么密碼。
好,言歸正傳。回到剛才STM32F4芯片MD5計算值為0的話題。我之前也沒用過STM32做MD5,印象中STM32F4系列是帶HASH處理器,支持MD5的。既然人家問STM32F4的芯片,那我就順手找了塊STM32F407 DISCOVERY[探索板]做測試。下載了SMT32F4系列最新傳統(tǒng)固件庫,下載最新版本好處不必多說。

ST官方提供的固件庫里面有現(xiàn)存的關(guān)于HASH的工程項目。

我使用上面橢圓圈里的工程文件,稍加調(diào)整,運行工程。結(jié)果跟客戶說的一樣,MD5的輸出值全0. 結(jié)合ST MCU參考手冊和代碼前前后后看了下,也沒發(fā)現(xiàn)啥問題。
想到ST 官方不是有另外一個CUBE庫嗎?立即打開建立了工程,編譯、運行一路正常。遺憾的是MD5結(jié)果還是0.
潛意識告訴我,手里的STM32F405 DISCOVERY上面的主芯片是STM32F407VG,會不會不支持HASH,或者說他根本不帶HASH處理器?心想STMF4系列里面,STM32F429算是比較高端的了,它總該帶HASH吧【自以為是在作怪了。。。】。
又找了個STM32F429的DISCOVERY學(xué)習(xí)板,搭建工程測試,效果照舊。到此,只得去找芯片的數(shù)據(jù)手冊做確認。確認后發(fā)現(xiàn)STM32F429、STM32F407芯片都不帶HASH 處理器,看來MD5結(jié)果為0就不難理解了。到此問題答案也算出來了。

為了保險起見,還是找了顆帶HASH的STM32芯片測試了下,測試結(jié)果果真不再總為0了。如果修改相關(guān)輸入信息,MD5值也立即改變。有興趣的人可以玩玩,上面的兩副圖是2次MD5的結(jié)果,我只是把第一種情形的輸入數(shù)字改了一個字符,那MD5結(jié)果就大相徑庭。
從上面的分析和實踐看來,客戶反映的MD5結(jié)果總為0是因為所使用的32F4芯片根本不帶HASH處理器所致。后來進一步跟客戶溝通也確認他使用的F4芯片是不帶HASH功能的。
那對于STM32F4系列哪些帶HASH處理器,可以用來做MD5的應(yīng)用呢?相關(guān)芯片是否支持HASH,各芯片數(shù)據(jù)手冊里一定有介紹,在手冊的首頁就有提。順便提醒下,盡量看英文手冊,或者中英結(jié)合看,不建議英文原版扔一邊只看中文。
我這里大致整理下。下圖中紅色圓圈圈出來的芯片都帶HASH,可以做MD5應(yīng)用。
其實,除了STM32F4系列外,stm32f2系列也支持加密處理,帶HASH處理器。
小結(jié)下:STM32系列眾多,即使某個系列,比方STM32F4系列,也分些子塊。整體上單個系列的硬件管腳兼容性很好,資源和功能方面整體上是一致的,但不同子系列或型號間還是有些差異。這些細微差異往往在芯片數(shù)據(jù)手冊上都會有體現(xiàn),作為工程開發(fā)人員,對你關(guān)注的資源或功能如果能事先做些確認比較好,否則無意中可能自己給自己挖坑了。
【拋磚引玉 旨在交流,如有錯疏 歡迎賜教】