1. 程式人生 > >對中文進行MD5加密的注意事項(Java版)

對中文進行MD5加密的注意事項(Java版)

       在工作中需要和第三方進行Http通訊,在通訊內容中有幾個引數涉及到了中文。自己在進行MD5加密驗證過程中,遇到了一些很奇怪(本人認為MD5是一個通用簡單的加密演算法,應該很穩定很完美了吧!)的問題:

問題1:接收到的問題亂碼了

解決:這個問題很常見,網上有很多說明。由於http協議在傳輸過程中使用的都是iso_8859_1編碼,所以在接收到引數之後,用value = new String(value.getBytes("ISO-8859-1"),"UTF-8"); 方法轉成utf-8就可以了。

問題2:按照問題1的解決辦法,生成MD5加密之前的字串(日誌中顯示中文沒有亂碼),但是MD5加密之後字串和本地的生成的不一樣。

解決:這個問題就比較奇怪了。我又詳細的查看了查看了第三方的開發問題,發現其中有"臺通知引數都用URLEncoder.encode("xxx","UTF-8")做了編碼處理"這句話,是不是這個原因引起的呢?自己做了嘗試將引數又通過value=URLDecoder.decode(value, "UTF-8")進行了解碼。測試出來,加密的字串一致了。

問題3:這個問題就更奇怪了,在測試環境MD5之後是一樣的,在正式環境就不一樣了,並且正式環境的tomcat重新啟動之後就正常了,但是一段時間之後又出現問題了。

 解決:這個問題是由於MD5中用的String.getBytes()沒有顯示的指定編碼格式導致的。如果方法String.getBytes()不顯示指定編碼格式,本方法將返回該作業系統預設的編碼格式的位元組陣列。(這個問題還有個疑問就是為什麼重啟tomcat之後又正常了)

總結:這個Http通訊時,對方進行了怎麼樣的正向操作,你就要逆向把它解析出來。在日誌看到的中文可能是並不準確的。中文亂碼的時候,需要檢視你處理過程中,可能涉及到的各種預設編碼。