In short form, you can:
- split the string into any characters that are not valid base64 data or padding
- try to convert each token
- , ,
:
var delimiters = new char[] { };
var possibles = value.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
foreach(var match in possibles)
{
try
{
var converted = Convert.FromBase64String(match);
var text = System.Text.Encoding.UTF8.GetString(converted);
if(!string.IsNullOrEmpty(text))
{
value = value.Replace(match, text);
}
}
catch (System.ArgumentNullException)
{
}
catch (System.FormatException)
{
}
}
, , , base64, base64.
"Hello QXdlc29tZQ== World" "Hello Awesome World", - "Ć©eĀ”Ćā¢Ć½µ"¢¹]", base64, .
( ):
base64 '\n' "Content-Transfer-Encoding: base64\n", :
'\n'- ,
"Content-Transfer-Encoding: base64" - ( ) ( ),
- ,
:
private string ConvertMixedUpTextAndBase64(string value)
{
var delimiters = new char[] { '\n' };
var possibles = value.Split(delimiters,
StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < possibles.Length - 1; i++)
{
if (possibles[i].EndsWith("Content-Transfer-Encoding: base64"))
{
var nextTokenPlain = DecodeBase64(possibles[i + 1]);
if (!string.IsNullOrEmpty(nextTokenPlain))
{
value = value.Replace(possibles[i + 1], nextTokenPlain);
i++;
}
}
}
return value;
}
private string DecodeBase64(string text)
{
string result = null;
try
{
var converted = Convert.FromBase64String(text);
result = System.Text.Encoding.UTF8.GetString(converted);
}
catch (System.ArgumentNullException)
{
}
catch (System.FormatException)
{
}
return result;
}