問題場景
公司項目需要加密傳輸,使用 AES 進行加密,加密后轉(zhuǎn)為 base64 字符串進行網(wǎng)絡傳輸。
結果發(fā)現(xiàn)接收后解密錯誤。
發(fā)現(xiàn)是 Convert.FromBase64String(data) 報錯 base-64 字符數(shù)組的長度無效。
查看接收后的字符串中所有的+ 都變成了空格。。。
據(jù)了解, UrlDecode 時,+ 會被解析為空格。而我在將 Request.InputStream 轉(zhuǎn)為字符串后,使用了 UrlDecode。
解決
方案一: 傳輸前進行編碼,傳輸后進行解碼
傳輸前使用 UrlEncode 編碼字符串:
postData = HttpUtility.UrlEncode(base64Str);
傳輸后進行解碼:
byte[] byts = new byte[Request.InputStream.Length];
Request.InputStream.Read(byts, 0, byts.Length);
string req = System.Text.Encoding.UTF8.GetString(byts);
req = HttpUtility.UrlDecode(req);
return req;
方案二: 傳輸后不進行 Url 解碼
byte[] byts = new byte[Request.InputStream.Length];
Request.InputStream.Read(byts, 0, byts.Length);
string req = System.Text.Encoding.UTF8.GetString(byts);
return req;