這是關於在各種語言中使用MD5庫時字符編碼的一般問題。我擔心的是:假設我生成使用原生Python字符串對象的MD5哈希值,像這樣:生成MD5散列跨平臺時的字符編碼問題
message = "hello world"
m = md5()
m.update(message)
然後我採取的MD5哈希的十六進制版本使用:
m.hexdigest()
和發送郵件& MD5散列通過網絡,比方說,一個JMS消息或HTTP請求。
現在我在Java程序中以本地Java字符串的形式獲取此消息以及校驗和。然後,我生成使用Java的MD5哈希值,像這樣(使用共享編解碼器庫):
String md5 = org.apache.commons.codec.digest.DigestUtils.DigestUtils.md5Hex(s)
我的感覺是,這是錯誤的,因爲我還沒有在任何一端指定的字符encodng。所以原始的散列將基於Python版本的字符串的字節; Java中的一個將基於Java版本字符串的字節,這兩個字節序列通常不會相同 - 是嗎?所以我真的需要指定「UTF-8」或任何兩端的權利?
(我實際上得到在我的代碼,其中的MD5校驗失敗的間歇性的錯誤,我懷疑這是什麼原因 - 但因爲它是間歇性的,這是很難說,如果改變這種修復與否)
謝謝!