Когда вы декодируете байты в строку и перекодируете их обратно в байты, вы теряете информацию. ASCII, в частности, является очень плохим выбором для этого, поскольку ASCII будет выбрасывать много информации по пути, но вы рискуете потерять информацию при кодировании и декодировании независимо от типа выбранной вами кодировки, поэтому вы не на правильном пути .
Вам нужна одна из подпрограмм BaseXX, которая кодирует двоичные данные в печатные символы, обычно для хранения или передачи по носителю, который допускает только текст (приходит на ум электронная почта и usenet).
Ascii85 является одним из таких алгоритмов, и страница содержит ссылки на различные реализации. Соотношение 4: 5 означает, что 4 байта будут закодированы как 5 символов (увеличение на 25%.)
Если ничего другого, в .NET уже встроена подпрограмма кодирования Base64 . Соотношение 3: 4 (увеличение на 33%), здесь:
Вот как ваш код может выглядеть этими методами:
string myString;
using (FileStream fs = new FileStream("C:\\tvin.exe", FileMode.Open))
using (BinaryReader br = new BinaryReader(fs))
{
byte[] bin = br.ReadBytes(Convert.ToInt32(fs.Length));
myString = Convert.ToBase64String(bin);
}
byte[] rebin = Convert.FromBase64String(myString);
using (FileStream fs2 = new FileStream("C:\\tvout.exe", FileMode.Create))
using (BinaryWriter bw = new BinaryWriter(fs2))
bw.Write(rebin);