我找不到 Convert From Base64 String 的错误

I can't find the mistake in Convert From Base64 String

我正在尝试从 Base64 字符串进行转换。我读到了 base64 是 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= 这是我的字符串:

LS0tLS0tLS0tLS0tLS0tLSBBVEVOw4fDg08gLS0tLS0tLS0tLS0tLS0NCkVzdGEgw6kgdW1hIG1lbnNhZ2VtIGF1dG9tw6F0aWNhLCANCg0KcG9yIGZhdm9yIG7Do28gcmVzcG9uZGEuIA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNClVQVElNRSAtIE5vdGlmaWNhw6fDo28gZGUgTWFyY2HDp8OjbyBkZSBBdWxhDQoNCg0KKglBbHVubzogVEhJQUdPIFNPQVJFUyBNT1RBDQoqCUNvbnRyYXRvOiA1NDI1NDENCioJVW5pZGFkZTogVU5JREFERSBWRVNQQVNJQU5PDQoNCioJQXVsYTogQ09OVkVSU0FUSU9OIElJSQ0KKglEYXRhIGRhIEF1bGE6IDI3LzAzLzIwMjENCioJSG9yYSBkYSBBdWxhOiAxMjowMA0KDQoqCURhdGEgZGEgTWFyY2HDp8OjbzogMjUvMDMvMjAyMQ0KKglIb3JhIGRhIE1hcmNhw6fDo286IDIxOjE1DQoqCUZvbnRlOiBNeVVQVElNRSBvbmxpbmUNCg0KKglGb25lOiAzMTM2NDUxMDAwDQoqCVNpdGU6IGh0dHA6Ly93d3cudXB0aW1lLmNvbS5icg0KDQo=PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj48L2hlYWQ+PGJvZHk+PEZPTlQgc3R5bGU9IkFyaWFsIiBzaXplPSIyIj48ZGl2Pi0tLS0tLS0tLS0tLS0tLS0gPHN0cm9uZz5BVEVOw4fDg088L3N0cm9uZz4gLS0tLS0tLS0tLS0tLS08YnIgLz4gIEVzdGEgw6kgdW1hIG1lbnNhZ2VtIGF1dG9tw6F0aWNhLCA8L2Rpdj48ZGl2PjxwPnBvciBmYXZvciBuw6NvIHJlc3BvbmRhLiA8YnIgLz4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPGJyIC8+ICAgIDxzdHJvbmc+PGJyIC8+ICAgICAgPHN0cm9uZz5VUFRJTUUgLSBOb3RpZmljYcOnw6NvIGRlIE1hcmNhw6fDo28gZGUgQXVsYTwvc3Ryb25nPjwvc3Ryb25nPjxiciAvPjwvZGl2Pjx1bD48bGk+PGI+QWx1bm86PC9iPiBUSElBR08gU09BUkVTIE1PVEE8L2xpPjxsaT48Yj5Db250cmF0bzo8L2I+IDU0MjU0MTwvbGk+PGxpPjxiPlVuaWRhZGU6PC9iPiBVTklEQURFIFZFU1BBU0lBTk88L2xpPjwvdWw+PHVsPjxsaT48Yj5BdWxhOjwvYj4gQ09OVkVSU0FUSU9OIElJSTwvbGk+PGxpPjxiPkRhdGEgZGEgQXVsYTo8L2I+IDI3LzAzLzIwMjE8L2xpPjxsaT48Yj5Ib3JhIGRhIEF1bGE6PC9iPiAxMjowMDwvbGk+PC91bD48dWw+PGxpPjxiPkRhdGEgZGEgTWFyY2HDp8Ojbzo8L2I+IDI1LzAzLzIwMjE8L2xpPjxsaT48Yj5Ib3JhIGRhIE1hcmNhw6fDo286PC9iPiAyMToxNTwvbGk+PGxpPjxiPkZvbnRlOjwvYj4gTXlVUFRJTUUgb25saW5lPC9saT48L3VsPjx1bD48bGk+PGI+Rm9uZTo8L2I+IDMxMzY0NTEwMDA8L2xpPjxsaT48Yj5TaXRlOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy51cHRpbWUuY29tLmJyIj5odHRwOi8vd3d3LnVwdGltZS5jb20uYnI8L2E+PC9saT48L3VsPjwvRk9OVD48L2JvZHk+PC9odG1sPg==

我找不到其他聊天记录。总是在可接受的喋喋不休之间。

我的代码是:

String codedBody = emailClass.Body.Replace("-", "+");
codedBody = codedBody.Replace("_", "/");
byte[] data = Convert.FromBase64String(codedBody);
emailClass.Body = Encoding.UTF8.GetString(data);

当我 运行 行 byte[] data = Convert.FromBase64String(codedBody); 我收到异常:

{"The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters."}

我使用 de Repair Base64,网站将我的字符串拆分为两个有效的 base64String。

PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj48L2hlYWQ+PGJvZHk+PEZPTlQgc3R5bGU9IkFyaWFsIiBzaXplPSIyIj48ZGl2Pi0tLS0tLS0tLS0tLS0tLS0gPHN0cm9uZz5BVEVOw4fDg088L3N0cm9uZz4gLS0tLS0tLS0tLS0tLS08YnIgLz4gIEVzdGEgw6kgdW1hIG1lbnNhZ2VtIGF1dG9tw6F0aWNhLCA8L2Rpdj48ZGl2PjxwPnBvciBmYXZvciBuw6NvIHJlc3BvbmRhLiA8YnIgLz4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPGJyIC8+ICAgIDxzdHJvbmc+PGJyIC8+ICAgICAgPHN0cm9uZz5VUFRJTUUgLSBOb3RpZmljYcOnw6NvIGRlIE1hcmNhw6fDo28gZGUgQXVsYTwvc3Ryb25nPjwvc3Ryb25nPjxiciAvPjwvZGl2Pjx1bD48bGk+PGI+QWx1bm86PC9iPiBUSElBR08gU09BUkVTIE1PVEE8L2xpPjxsaT48Yj5Db250cmF0bzo8L2I+IDU0MjU0MTwvbGk+PGxpPjxiPlVuaWRhZGU6PC9iPiBVTklEQURFIFZFU1BBU0lBTk88L2xpPjwvdWw+PHVsPjxsaT48Yj5BdWxhOjwvYj4gQ09OVkVSU0FUSU9OIElJSTwvbGk+PGxpPjxiPkRhdGEgZGEgQXVsYTo8L2I+IDI3LzAzLzIwMjE8L2xpPjxsaT48Yj5Ib3JhIGRhIEF1bGE6PC9iPiAxMjowMDwvbGk+PC91bD48dWw+PGxpPjxiPkRhdGEgZGEgTWFyY2HDp8Ojbzo8L2I+IDI1LzAzLzIwMjE8L2xpPjxsaT48Yj5Ib3JhIGRhIE1hcmNhw6fDo286PC9iPiAyMToxNTwvbGk+PGxpPjxiPkZvbnRlOjwvYj4gTXlVUFRJTUUgb25saW5lPC9saT48L3VsPjx1bD48bGk+PGI+Rm9uZTo8L2I+IDMxMzY0NTEwMDA8L2xpPjxsaT48Yj5TaXRlOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy51cHRpbWUuY29tLmJyIj5odHRwOi8vd3d3LnVwdGltZS5jb20uYnI8L2E+PC9saT48L3VsPjwvRk9OVD48L2JvZHk+PC9odG1sPg==

LS0tLS0tLS0tLS0tLS0tLSBBVEVOw4fDg08gLS0tLS0tLS0tLS0tLS0NCkVzdGEgw6kgdW1hIG1lbnNhZ2VtIGF1dG9tw6F0aWNhLCANCg0KcG9yIGZhdm9yIG7Do28gcmVzcG9uZGEuIA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNClVQVElNRSAtIE5vdGlmaWNhw6fDo28gZGUgTWFyY2HDp8OjbyBkZSBBdWxhDQoNCg0KKglBbHVubzogVEhJQUdPIFNPQVJFUyBNT1RBDQoqCUNvbnRyYXRvOiA1NDI1NDENCioJVW5pZGFkZTogVU5JREFERSBWRVNQQVNJQU5PDQoNCioJQXVsYTogQ09OVkVSU0FUSU9OIElJSQ0KKglEYXRhIGRhIEF1bGE6IDI3LzAzLzIwMjENCioJSG9yYSBkYSBBdWxhOiAxMjowMA0KDQoqCURhdGEgZGEgTWFyY2HDp8OjbzogMjUvMDMvMjAyMQ0KKglIb3JhIGRhIE1hcmNhw6fDo286IDIxOjE1DQoqCUZvbnRlOiBNeVVQVElNRSBvbmxpbmUNCg0KKglGb25lOiAzMTM2NDUxMDAwDQoqCVNpdGU6IGh0dHA6Ly93d3cudXB0aW1lLmNvbS5icg0KDQo=

这是规则吗?当我有一个 = 时,我会滑掉我的字符串 ?

我承认我的方法需要改进,但我解决这个问题的方法是根据“=”拆分中间字符串,然后将“=”附加到每个新字符串上,创建一个简单的字符串数组base64 值然后你可以做你正常的 base64 解码就完成了!

Demo

我使用正则表达式 ([a-zA-Z0-9\+\/]*={0,3}) 来获取有效的 Base64 字符串。 后来我添加了 de Base64 字符串。

String codedBody = emailClass.Body.Replace("-", "+");
codedBody = codedBody.Replace("_", "/");
byte[] DataBody = new byte[0];

try
{
    byte[] data = Convert.FromBase64String(codedBody);
    DataBody = AddBiteArray(DataBody, data);
}
catch(Exception e)
{
    var GetBase64Maches = _regexTOGetBase64.Matches(codedBody);
    
    foreach(Match Base64StringMatch in GetBase64Maches)
    {
        var Base64String = Base64StringMatch.Groups[1].Value;
        byte[] data = Convert.FromBase64String(Base64String);
        DataBody = AddBiteArray(DataBody, data);
    }

}

emailClass.Body = Encoding.UTF8.GetString(DataBody);

codedBody 是:

LS0tLS0tLS0tLS0tLS0tLSBBVEVOw4fDg08gLS0tLS0tLS0tLS0tLS0NCkVzdGEgw6kgdW1hIG1lbnNhZ2VtIGF1dG9tw6F0aWNhLCANCg0KcG9yIGZhdm9yIG7Do28gcmVzcG9uZGEuIA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNClVQVElNRSAtIE5vdGlmaWNhw6fDo28gZGUgTWFyY2HDp8OjbyBkZSBBdWxhDQoNCg0KKglBbHVubzogVEhJQUdPIFNPQVJFUyBNT1RBDQoqCUNvbnRyYXRvOiA1NDI1NDENCioJVW5pZGFkZTogVU5JREFERSBWRVNQQVNJQU5PDQoNCioJQXVsYTogQ09OVkVSU0FUSU9OIElJSQ0KKglEYXRhIGRhIEF1bGE6IDI3LzAzLzIwMjENCioJSG9yYSBkYSBBdWxhOiAxMjowMA0KDQoqCURhdGEgZGEgTWFyY2HDp8OjbzogMjUvMDMvMjAyMQ0KKglIb3JhIGRhIE1hcmNhw6fDo286IDIxOjE1DQoqCUZvbnRlOiBNeVVQVElNRSBvbmxpbmUNCg0KKglGb25lOiAzMTM2NDUxMDAwDQoqCVNpdGU6IGh0dHA6Ly93d3cudXB0aW1lLmNvbS5icg0KDQo=PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj48L2hlYWQ+PGJvZHk+PEZPTlQgc3R5bGU9IkFyaWFsIiBzaXplPSIyIj48ZGl2Pi0tLS0tLS0tLS0tLS0tLS0gPHN0cm9uZz5BVEVOw4fDg088L3N0cm9uZz4gLS0tLS0tLS0tLS0tLS08YnIgLz4gIEVzdGEgw6kgdW1hIG1lbnNhZ2VtIGF1dG9tw6F0aWNhLCA8L2Rpdj48ZGl2PjxwPnBvciBmYXZvciBuw6NvIHJlc3BvbmRhLiA8YnIgLz4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPGJyIC8+ICAgIDxzdHJvbmc+PGJyIC8+ICAgICAgPHN0cm9uZz5VUFRJTUUgLSBOb3RpZmljYcOnw6NvIGRlIE1hcmNhw6fDo28gZGUgQXVsYTwvc3Ryb25nPjwvc3Ryb25nPjxiciAvPjwvZGl2Pjx1bD48bGk+PGI+QWx1bm86PC9iPiBUSElBR08gU09BUkVTIE1PVEE8L2xpPjxsaT48Yj5Db250cmF0bzo8L2I+IDU0MjU0MTwvbGk+PGxpPjxiPlVuaWRhZGU6PC9iPiBVTklEQURFIFZFU1BBU0lBTk88L2xpPjwvdWw+PHVsPjxsaT48Yj5BdWxhOjwvYj4gQ09OVkVSU0FUSU9OIElJSTwvbGk+PGxpPjxiPkRhdGEgZGEgQXVsYTo8L2I+IDI3LzAzLzIwMjE8L2xpPjxsaT48Yj5Ib3JhIGRhIEF1bGE6PC9iPiAxMjowMDwvbGk+PC91bD48dWw+PGxpPjxiPkRhdGEgZGEgTWFyY2HDp8Ojbzo8L2I+IDI1LzAzLzIwMjE8L2xpPjxsaT48Yj5Ib3JhIGRhIE1hcmNhw6fDo286PC9iPiAyMToxNTwvbGk+PGxpPjxiPkZvbnRlOjwvYj4gTXlVUFRJTUUgb25saW5lPC9saT48L3VsPjx1bD48bGk+PGI+Rm9uZTo8L2I+IDMxMzY0NTEwMDA8L2xpPjxsaT48Yj5TaXRlOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy51cHRpbWUuY29tLmJyIj5odHRwOi8vd3d3LnVwdGltZS5jb20uYnI8L2E+PC9saT48L3VsPjwvRk9OVD48L2JvZHk+PC9odG1sPg==

和:

static byte[] AddBiteArray(Byte[] destino, Byte[] origem)
{
    var retorno = new Byte[destino.Length + origem.Length];
    destino.CopyTo(retorno, 0);
    origem.CopyTo(retorno, destino.Length);
    return retorno;
}