问题场景
公司项目需要加密传输,使用 AES
进行加密,加密后转为 base64
字符串进行网络传输。
结果发现接收后解密错误。
发现是 Convert.FromBase64String(data)
报错 base-64 字符数组的长度无效
。
查看接收后的字符串中所有的+
都变成了空格。。。
据了解, UrlDecode
时,+
会被解析为空格。而我在将 Request.InputStream
转为字符串后,使用了 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;