base64出現空格的問題

2021-06-05 13:40:27 字數 817 閱讀 6565

如:將一串引數做了base64後直接作為url的一部分傳送出去了。

要知道base64的演算法有pad,crcf的控制選項,而又很湊巧,發使用的是none,即pading部分帶有crcf,

這樣乙個正常的引數輸入,會產生類似於:

ancdfdsfdsfdsfsadfasfsafafdsafadsfsafasdfasdfsad

fadfdsfsd==

注意上面換行的地方被加了cr cf 即0a 0d.

這樣的url通過ie出去後,ie將0a 0d 轉化為%20 即空格的編碼? 這個為什麼我現在還沒有找到資料.

另外和我合作的服務端通知反映,他讀到的引數是亂碼,檢查後發現是受到了+的干擾。

從具體來說base64中+ / 比較特殊,而/ 實際上並沒有產生干擾,而+在服務端通知讀取時候變成了空格,注意是空格不是%20.

"加號(+)是base64編碼的一部分,而加號在querystring中被當成是空格。    因此,當乙個含有base64編碼的字串直接作為url的一部分時,如果其中含有加號,則使用querystring讀取時,再使用base64解碼就會發生錯誤。    解決的辦法有兩個:一是使用base64的字串作為url的一部分是,使用urlencode一類的函式進行編碼;二是在接收base64字串後,使用replaceall將字串中的空格替換成加號,然後再解碼。  "

另外我從c端的抓包發現從c端發出的資料確實0a 0d 被替換為%20 %20發出,但是+ / 已然不變。

也就是說服務端必定有某個層次能夠得到原始資料,而問題可能就像上面引用部分文字描述的那樣,即+被querystring之類的api做了手腳比如urlencoding。 

base64出現空格問題的解決方案

專案中有乙個引數是 byte,在構建 http請求的時候不便引數的傳輸,於是就想到了 使用base64進行編碼之後當成字串進行傳輸。接下來就用自己寫了乙個http工具類,如下 片段 引數方式post傳送 param httprequest 請求 return 響應 專案啟動之後,引數都傳遞過去了,沒...

C 處理base64 以及base64的原理分析

base64的原理,base64的碼表只有64個字元,如果要表達64個字元的話,使用6的bit即可完全表示 2的6次方為64 因為base64的編碼只有6個bit即可表示,而正常的字元是使用8個bit表示,8和6的最小公倍數是24,所以4個base64字元可以表示3個標準的ascll字元 publi...

Base64編碼換行問題

一般涉及到金錢的系統都會有簽名驗證這一步,基本上會將簽名的內容進行base64編碼,最近就遇到乙個問題,一直在驗籤失敗,最後發現是jar包的問題。對方提供的sdk中所用的base64工具類是commons codec 1.10.jar的,這種情況下進行encodebase64string得到的結果是...