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

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

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

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