關於http傳輸base64加密串的問題



問題場景:

在使用luacurl進行http post請求的時候,post的內容是一串json串。json傳里面的某個字段帶上了base64加密的串。

如post的內容如下: 

xxxxxx{"xx"="JAJFKDJKF+=="}

傳輸到對方后,對方接收到的報文里面的post的內容變成了:  

xxxxxx{"xx"="JAJFKDJKF =="}

遠程和負責服務器端的小伙伴調了大半天,發現+號變成了空格!這是什么詭異情況?!


查詢相關資料,發現:

1. base64編碼里面有一個 “+” 號,在urlecode編碼中 “+” 會被解碼成空格,urlencode時,"+" 號肯定是由空格編碼出來的,但是base64編碼的結果中 "+" 不是空格編碼出來的,如果將base64編碼作為安全的url編碼使用,則 “+” 將被解碼成空格,這是我們不願看到的; 所以不要base64編碼作為url編碼來使用.

2. 我們知道http頭里面可能會用base64編碼來傳輸一些信息,因為這些信息不會被web服務器默認做url解碼的,我們可以得到原始的編碼信息,所以http頭里面使用base64編碼是可以接受的。
用base64編碼后再進行URL編碼,再傳輸可能會避免此類問題。

Base64編碼將二進制數據按照每三個字節轉換成四個字節可讀字符,編碼后的字符長度大約為136.1%。字符范圍為 A-Z  a-z  0-9  \  +。但編碼后的字符串不太適合使用URL傳輸,中文加密后的亂碼也多是因為這個原因引起:放在url中傳輸時+號會被替換成空格;並且每76個字符都會添加一個換行"\n",這個換行符合會丟失。


在實際的測試過程中,確實發現+號被替換成空格了,但是,\n換行符並未丟失!


解決方案如下:

接收方如果發現收到的json加密串中包含空格,將其替換為+號后,再進行Base64的解密工作.


免責聲明!

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



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