I'm try make a Convert From Base64 String. I read about base64 be ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
This is my string:
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==
I cant find a different chatter. Always are between the acceptable chatters.
I my code i do:
String codedBody = emailClass.Body.Replace("-", "+");
codedBody = codedBody.Replace("_", "/");
byte[] data = Convert.FromBase64String(codedBody);
emailClass.Body = Encoding.UTF8.GetString(data);
When i run the line byte[] data = Convert.FromBase64String(codedBody);
I receive the exeption:
{"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."}
I use de Repair Base64 and the site split my string in two valid base64Strings.
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=
Is This a rule ? When I have a =
i slip my string ?
I using the regex ([a-zA-Z0-9\+\/]*={0,3})
to get a valid Base64String.
Later i add de Base64Strings.
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);
The codedBody is:
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==
and :
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;
}