¿Cómo codifico y decodifico una cadena base64?

  1. ¿Cómo devuelvo una cadena codificada en base64 dada una cadena?

  2. ¿Cómo decodifico una cadena codificada en base64 en una cadena?

Codificar

public static string Base64Encode(string plainText) { var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText); return System.Convert.ToBase64String(plainTextBytes); } 

Descodificar

 public static string Base64Decode(string base64EncodedData) { var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData); return System.Text.Encoding.UTF8.GetString(base64EncodedBytes); } 

Estoy compartiendo mi implementación con algunas características interesantes:

  • usa métodos de extensión para la clase de encoding. La razón fundamental es que alguien puede necesitar soportar diferentes tipos de codificaciones (no solo UTF8).
  • Otra mejora falla con elegancia con un resultado nulo para la entrada nula: es muy útil en escenarios de la vida real y admite equivalencia para X = decodificar (codificar (X)).

Observación: recuerde que para usar el Método de extensión, debe (!) Importar el espacio de nombre con la palabra clave (en este caso, using MyApplication.Helpers.Encoding ).

Código:

 namespace MyApplication.Helpers.Encoding { public static class EncodingForBase64 { public static string EncodeBase64(this System.Text.Encoding encoding, string text) { if (text == null) { return null; } byte[] textAsBytes = encoding.GetBytes(text); return System.Convert.ToBase64String(textAsBytes); } public static string DecodeBase64(this System.Text.Encoding encoding, string encodedText) { if (encodedText == null) { return null; } byte[] textAsBytes = System.Convert.FromBase64String(encodedText); return encoding.GetString(textAsBytes); } } } 

Ejemplo de uso:

 using MyApplication.Helpers.Encoding; // !!! namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Test1(); Test2(); } static void Test1() { string textEncoded = System.Text.Encoding.UTF8.EncodeBase64("test1..."); System.Diagnostics.Debug.Assert(textEncoded == "dGVzdDEuLi4="); string textDecoded = System.Text.Encoding.UTF8.DecodeBase64(textEncoded); System.Diagnostics.Debug.Assert(textDecoded == "test1..."); } static void Test2() { string textEncoded = System.Text.Encoding.UTF8.EncodeBase64(null); System.Diagnostics.Debug.Assert(textEncoded == null); string textDecoded = System.Text.Encoding.UTF8.DecodeBase64(textEncoded); System.Diagnostics.Debug.Assert(textDecoded == null); } } } 

Una ligera variación en la respuesta de andrew.fox, ya que la cadena para descodificar podría no ser una cadena codificada en base64 correcta:

 using System; namespace Service.Support { public static class Base64 { public static string ToBase64(this System.Text.Encoding encoding, string text) { if (text == null) { return null; } byte[] textAsBytes = encoding.GetBytes(text); return Convert.ToBase64String(textAsBytes); } public static bool TryParseBase64(this System.Text.Encoding encoding, string encodedText, out string decodedText) { if (encodedText == null) { decodedText = null; return false; } try { byte[] textAsBytes = Convert.FromBase64String(encodedText); decodedText = encoding.GetString(textAsBytes); return true; } catch (Exception) { decodedText = null; return false; } } } } 

De acuerdo con las respuestas de Andrew Fox y Cebe, lo cambié y les hice extensiones de cadena en lugar de extensiones de Base64String.

 public static class StringExtensions { public static string ToBase64(this string text) { return ToBase64(text, Encoding.UTF8); } public static string ToBase64(this string text, Encoding encoding) { if (string.IsNullOrEmpty(text)) { return text; } byte[] textAsBytes = encoding.GetBytes(text); return Convert.ToBase64String(textAsBytes); } public static bool TryParseBase64(this string text, out string decodedText) { return TryParseBase64(text, Encoding.UTF8, out decodedText); } public static bool TryParseBase64(this string text, Encoding encoding, out string decodedText) { if (string.IsNullOrEmpty(text)) { decodedText = text; return false; } try { byte[] textAsBytes = Convert.FromBase64String(text); decodedText = encoding.GetString(textAsBytes); return true; } catch (Exception) { decodedText = null; return false; } } }