C# base-64 字符数组的长度无效

问题场景

公司项目需要加密传输,使用 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;

你可能感兴趣的:(C# base-64 字符数组的长度无效)