在工作中需要和第三方進行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("***","utf-8")做了編碼處理"這句話,是不是這個原因引起的呢?自己做了嘗試將引數又通過value=urldecoder.decode(value, "utf-8")進行了解碼。測試出來,加密的字串一致了。
問題3:這個問題就更奇怪了,在測試環境md5之後是一樣的,在正式環境就不一樣了,並且正式環境的tomcat重新啟動之後就正常了,但是一段時間之後又出現問題了。
解決:這個問題是由於md5中用的string.getbytes()沒有顯示的指定編碼格式導致的。如果方法string.getbytes()不顯示指定編碼格式,本方法將返回該作業系統預設的編碼格式的位元組陣列。(這個問題還有個疑問就是為什麼重啟tomcat之後又正常了)
總結:這個http通訊時,對方進行了怎麼樣的正向操作,你就要逆向把它解析出來。在日誌看到的中文可能是並不準確的。中文亂碼的時候,需要檢視你處理過程中,可能涉及到的各種預設編碼。
對已有資料進行MD5加密
1 自建加密函式 create or replace function md5 passwd in varchar2 return varchar2 is retval varchar2 32 begin retval utl raw.cast to raw dbms obfuscation too...
mysql中進行md5加密
如果資料庫表user中有一列為passwd,存放的是md5加密的資料,如何更新新的資料。update user set passwd md5 123321 where uname lihua 插入新的資料 insert into user uname,passwd values xiaoqiang ...
python 批量進行md5加密
採用工具是anaconda的python軟體工具,因為其包含python語句外,還包含許多統計函式 2 具體使用步驟 1 資料庫資料匯出成csv檔案,其中有需進行md5加密字段 2 csv匯入至python中 3 載入md5函式 4 進行md5加密 5 匯出加密後資料 md5是什麼?md5為計算機安...