C#解码Java生成的Base64字符串

最近在开发过程中经常遇到C# 客户端调用java开发的服务端程序,这次遇到的坑是C# 中的Convert.FromBase64String(dummyData)解密不了java返回的base64字符串,报如下错误:

1. FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters. ]
   System.Convert.FromBase64String(String s) +0
   System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) +77
   System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState) +4

2. 输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符。

3. Base-64 字符数组或字符串的长度无效。

最后通过定位问题需要如下操作(进行特殊字符替换):

                string dummyData = strinput.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+").Replace("_","/").Replace("-","+");
                if (dummyData.Length % 4 > 0)
                {
                    dummyData = dummyData.PadRight(dummyData.Length + 4 - dummyData.Length % 4, '=');
                }
                byte[] inputArray = Convert.FromBase64String(dummyData);

问题虽小,还是值得记录,希望能够帮到遇到同样问题的人。

posted @ 2022-12-03 09:09  星火燎猿*  阅读(83)  评论(0)    收藏  举报