對中文進行MD5加密的注意事項(Java版,編碼問題)


http://blog.csdn.net/tongdao/article/details/20690187

 

       在工作中需要和第三方進行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通信時,對方進行了怎么樣的正向操作,你就要逆向把它解析出來。在日志看到的中文可能是並不准確的。中文亂碼的時候,需要查看你處理過程中,可能涉及到的各種默認編碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM