C# - Codificando para base64 : String e Array de bytes


Hoje veremos como realizar a codificação e decodificação para base64 com strings e array de bytes  na linguagem C#.

O Base64 é um método para codificar dados para transferência na Interner (codificação MIME para transferência de conteúdo). É muito utilizado para transmitir dados binários por meios de transmissão que lidam apenas com texto, como por exemplo para enviar arquivos anexos por e-mail.

E hoje veremos como tratar strings e array de bytes para o formato base64.

O namespace System.Convert  possui dois métodos para tratar com Base64:

O método estático FromBase64String na classe Convert torna a decodificação uma base64-string codificada uma questão simples. Este método retorna um array de bytes que contém os elementos decodificados da String.

A classe Convert torna simples a codificação entre um byte[] e uma String. Os parâmetros para esse método são bastante flexíveis, permitindo iniciar e parar o conversão em qualquer ponto da matriz de bytes de entrada.

Nos exemplos usamos uma aplicação Console do tipo .NET Core criada no VS 2019 Community.

1- Convertendo String para Base64 e vice-versa

Vamos criar uma classe chamada Conversor na raiz do projeto e definir dois métodos nesta classe:

No código a seguir implementamos os métodos acima:

using System;
using System.Text;
namespace CShp_Base64
{
    public class Conversor
    {
        //convert string para base64
        static public string EncodeToBase64(string texto)
        {
            try
            {
                byte[] textoAsBytes = Encoding.ASCII.GetBytes(texto);
                string resultado = System.Convert.ToBase64String(textoAsBytes);
                return resultado;
            }
            catch (Exception)
            {
                throw;
            }
        }
        //converte de base64 para texto
        static public string DecodeFrom64(string dados)
        {
            try
            {
                byte[] dadosAsBytes = System.Convert.FromBase64String(dados);
                string resultado = System.Text.ASCIIEncoding.ASCII.GetString(dadosAsBytes);
                return resultado;
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}

Esta classe define dois métodos estáticos para tratar com a versão de/para base64.

Usando métodos de extensão

Podemos também definir métodos de extensão para realizar essa tarefa.

Lembrando que os métodos de extensão são definidos como estáticos, mas são chamados usando a sintaxe do método de instância. Seu primeiro parâmetro especifica em que tipo o método opera e o parâmetro é precedido pelo modificador this.

Os métodos de extensão só estarão no escopo quando você importar explicitamente o namespace para seu código-fonte com uma diretiva using.

Vamos criar uma classe chamada Base64ExtensionMethods com o código abaixo:

using System;
namespace CShp_Base64
{
    public static class Base64ExtensionMethos
    {
        //codificando dados binários como base64
        public static string Base64EncodeBytes(this byte[] inputBytes) =>
                                                (Convert.ToBase64String(inputBytes));
        //decodificando base64 
        public static byte[] Base64DecodeString(this string texto)
        {
            byte[] byteArrayDecodificado = Convert.FromBase64String(texto);
            return (byteArrayDecodificado);
        }
    }
}

Agora podemos usar tanto os métodos da classe Conversor como os métodos de extensão para realizar a conversão de string para base64 e vice-versa.

Pegue o código completo do projeto aqui:  CShp_Base64.zip

"E Jesus lhe disse: Ninguém, que lança mão do arado e olha para trás, é apto para o reino de Deus."
Lucas 9:62

Referências:


José Carlos Macoratti