前端用base64加密后的數據,傳遞到后台時發現一個問題:
比如 韓飛 這個名字,base64加密后的字符串為
6Z+p6aOe
但是后端接受到參數為:
6Z p6aOe
+號變成了空格,導致后台解密的時候出現異常。
解決辦法如下:
1、修改客戶端,將客戶端帶“+”的參數中的“+”全部替換為“2B%”,這樣參數傳到服務器端時就能得到“+”了。
2、修改服務器端,將空格替換為“+”,這種方式只適用於參數中有“+”沒有空格的情況。
本人前端對參數使用base64加密,后端對該參數使用base64解密,使用了第二種方法,替換空格為+號之后再解密。
后端解碼時遇到一個問題,不能正確解碼:
import sun.misc.BASE64Decoder;
-
merchantRelPerson = merchantRelPerson.replace( " ", "+");
-
BASE64Decoder decoder = new BASE64Decoder();
-
byte[] b = null;
-
b = decoder.decodeBuffer(merchantRelPerson);
-
merchantRelPerson = new String(b, "utf-8");
最后發現,是new String時沒有指定編碼方式。指定之后就沒問題了。
項目用的是utf-8編碼,但是直接
merchantRelPerson = new String(b);
還是亂碼,指定utf-8之后就好了。