Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 输入不是有效的Base-64字符串,因为它包含非Base 64字符,即填充字符中的非法字符_C#_Asp.net Core_Base64 - Fatal编程技术网

C# 输入不是有效的Base-64字符串,因为它包含非Base 64字符,即填充字符中的非法字符

C# 输入不是有效的Base-64字符串,因为它包含非Base 64字符,即填充字符中的非法字符,c#,asp.net-core,base64,C#,Asp.net Core,Base64,我试图将base64string转换为可读字符串,但它给出的错误是“输入不是有效的Base-64字符串,因为它包含非Base-64字符、两个以上的填充字符或填充字符中的非法字符。” 但是,当我在在线转换器上执行相同操作时,例如,这里的,它正在工作 string base64String="DQpUZXN0DQoNCkNvbmZpZGVudGlhbGl0eSBOb3RpY2U6IFRoaXMgZS1tYWlsLCBhbmQgYW55IGF0dGFjaG1lbnQgdG8gaXQsIGNvbnRha

我试图将base64string转换为可读字符串,但它给出的错误是“输入不是有效的Base-64字符串,因为它包含非Base-64字符、两个以上的填充字符或填充字符中的非法字符。”

但是,当我在在线转换器上执行相同操作时,例如,这里的,它正在工作

string base64String="DQpUZXN0DQoNCkNvbmZpZGVudGlhbGl0eSBOb3RpY2U6IFRoaXMgZS1tYWlsLCBhbmQgYW55IGF0dGFjaG1lbnQgdG8gaXQsIGNvbnRhaW5zIHByaXZpbGVnZWQgYW5kIGNvbmZpZGVudGlhbCBpbmZvcm1hdGlvbiBpbnRlbmRlZCBvbmx5IGZvciB0aGUgdXNlIG9mIHRoZSBpbmRpdmlkdWFsKHMpIG9yIGVudGl0eSBuYW1lZCBvbiB0aGUgZS1tYWlsLiBJZiB0aGUgcmVhZGVyIG9mIHRoaXMgZS1tYWlsIGlzIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCBvciB0aGUgZW1wbG95ZWUgb3IgYWdlbnQgcmVzcG9uc2libGUgZm9yIGRlbGl2ZXJpbmcgaXQgdG8gdGhlIGludGVuZGVkIHJlY2lwaWVudCwgeW91IGFyZSBoZXJlYnkgbm90aWZpZWQgdGhhdCByZWFkaW5nIHRoaXMgZS1tYWlsIGlzIHN0cmljdGx5IHByb2hpYml0ZWQuIElmIHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgZS1tYWlsIGluIGVycm9yLCBwbGVhc2UgaW1tZWRpYXRlbHkgcmV0dXJuIGl0IHRvIHRoZSBzZW5kZXIgYW5kIGRlbGV0ZSBpdCBmcm9tIHlvdXIgc3lzdGVtLg0K="; 
var bytes = Convert.FromBase64String(base64String);
var decodededString = Encoding.UTF8.GetString(bytes);
Console.WriteLine(decodededString );
看到这个了吗

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

从错误消息中,您应该检查base64string的长度是否是4的倍数 并且base64string是有效的

Base64字符串将仅由字符“A'..'Z”、“A'..'Z”、“0'..'9'、“+”、“/”组成,并且通常在末尾填充最多两个“=”,以使长度为4的倍数

正如madreflection所评论的,您原来的Base64字符串长度是713,而不是4的倍数,您应该删除最后一个“=”填充字符以使Base64字符串有效。

我找到了答案。 以下是将任何base64字符串转换为可读utf8字符串的示例代码:

    static string GetStringFromBase64String(string msg)
    {

       string _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

        StringBuilder msgString = new StringBuilder();      
        int len = 0;

        while (len < msg.Length)
        {
            int enc1 = _keyStr.IndexOf(msg[len++]);
            int enc2 = _keyStr.IndexOf(msg[len++]);
            int enc3 = _keyStr.IndexOf(msg[len++]);
            int enc4 = _keyStr.IndexOf(msg[len++]);

            int chr1 = (enc1 << 2) | (enc2 >> 4);
            int chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
            int chr3 = ((enc3 & 3) << 6) | enc4;

            msgString.Append(Convert.ToChar(chr1));

            if (enc3 != 64)
            {
                msgString.Append(Convert.ToChar(chr2));
            }
            if (enc4 != 64)
            {
                msgString.Append(Convert.ToChar(chr3));
            }
        }
        string final = GetUtf8String(msgString.ToString());
        return final;
    }

    static string GetUtf8String(string msg)
    {
        string utftext = "";
        msg = msg.Replace("\r", "");
        msg = msg.Replace("\n", "");
        msg = msg.Replace("\r\n", "");
        msg = msg.Replace("\r\r", "");
        msg = msg.Replace("\n\n", "");

        msg = msg.Replace("\\r", "");
        msg = msg.Replace("\\n", "");
        msg = msg.Replace("\\r\\n", "");
        msg = msg.Replace("\\r\\r", "");
        msg = msg.Replace("\\n\\n", "");
        for (var n = 0; n < msg.Length; n++)
        {

            int c = msg[n];

            if (c < 128)
            {
                utftext += Convert.ToChar(c);
            }
            else if ((c > 127) && (c < 2048))
            {
                utftext += Convert.ToChar((c >> 6) | 192);
                utftext += Convert.ToChar((c & 63) | 128);
            }
            else
            {
                utftext += Convert.ToChar((c >> 12) | 224);
                utftext += Convert.ToChar(((c >> 6) & 63) | 128);
                utftext += Convert.ToChar((c & 63) | 128);
            }

        }

        return utftext;
    }
静态字符串GetStringFromBase64String(字符串消息)
{
字符串_keyStr=“abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzo123456789+/=”;
StringBuilder msgString=新的StringBuilder();
int len=0;
while(长度4);
int chr2=((enc2&15)>2);
int chr3=((enc3&3)127)和&(c<2048))
{
utftext+=Convert.ToChar((c>>6)| 192);
utftext+=Convert.ToChar((c&63)| 128);
}
其他的
{
utftext+=Convert.ToChar((c>>12)| 224);
utftext+=Convert.ToChar((c>>6)和63)| 128);
utftext+=Convert.ToChar((c&63)| 128);
}
}
返回utftext;
}

当您反转该过程时,即从预期的文本开始,称为
GetBytes
,然后是
ToBase64String
,您得到了什么?此值上不需要填充字符。它是怎么到达那里的?有712个字符没有
=
,712可以被4整除。不需要填充。将您的字符串显示为格式错误(打开实时模式)。请参阅我附带的有问题的屏幕截图