ray_code, eu tentei seu código em minha lima de .exe. Como você disse os bytes antes e depois de diferem.
A razão pela qual diferem:
Abaixo está uma linha do msdn (codificações compreensivas:
http://msdn.microsoft.com/en-us/library/ms404377.aspx)“•Se sua aplicação tem o índice que não é estritamente ASCII e não o codifica com ASCIIEncoding, cada caráter não-ASCII codifica como um ponto de interrogação (”? "). Se a aplicação descodifica então estes dados, a informação está perdida.”
Obvioursly os dados do byte da lima de .exe é “não ASCII” e a informação é perdida.
O que é a solução para este:
Abaixo está uma linha do msdn (classe da codificação:
http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx)“Se sua aplicação deve codificar dados binários arbitrários no texto, deve usar um protocolo tal como o uuencode, que é executado por métodos tais como Convert.ToBase64CharArray.
”
Obviamente os dados do byte da lima de .exe são dados binários arbitrários e você deve considerar using a codificação Base64 preferivelmente segundo as indicações do código abaixo: