byte[]->new String(byte[]) -> getByte()引發的不一致問題


今天接短信接口,短信接口提供了sdk,我們可以直接用sdk發送請求然后發送對應短信。

但是想使用我們平台自定義的httpUtil實現。

 

然而忙了1天半,才解決這個問題,還是我同事幫忙找出問題並解決的。

 

 步驟:

  1、請求信息轉json

  2、json走AES加密得到byte[]

  3、將byte[]放入post請求發送,並接受響應。

sdk直接成功,它是自己基於HttpURLConnection封裝的一套HttpUtil,直接接受了byte[]作為請求參數,使用post發送響應成功

我們的HttpUtil是基於HttpClient封裝而來,post方法只能接受String或Map參數,於是將加密后的byte[] 進行new String()操作后傳入,跟進信息,底層將該String采用getByte("UTF-8")進行轉換給Request然后請求。一直返回解密失敗。

反復調試,將contentType指定為text/plain,編碼統一都是UTF-8。但依舊一直該錯誤。對比兩種方式加密后byte[],沒有區別。最后發現使用new String(byte[])之后getByte()得到的byte[]容量變大,顛覆我的認知了,byte[]數組經過指定編碼new String()然后經過指定編碼getByte[]得到的居然不一致。后面定位原因是我系統默認的編碼和指定的編碼都是UTF-8,但是AES加密產生的byte[]的編碼是ISO-8859-1,導致得到的byte[]不是原來的byte[],所以解密失敗。

 

 

 

 也就是說我前面解碼byte[]得到字符串的時候使用了錯誤編碼,導致后面getByte指定錯誤編碼得到的字符串解密后不是原來的樣子。

 


免責聲明!

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



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