decodificar convertir base64binary c# base64

convertir - decodificar base64 en c#



¿Cómo puedo codificar y decodificar una cadena base64? (4)

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); }

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

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


Basándome en las respuestas de Andrew Fox y Cebe, las cambié y las hice extensiones de cadena en lugar de las extensiones 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; } } }


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

  • utiliza métodos de extensión para la clase de codificación. La razón es que alguien puede necesitar soportar diferentes tipos de codificaciones (no solo UTF8).
  • Otra mejora es fallar con gracia con el resultado nulo para la entrada nula: es muy útil en escenarios de la vida real y admite la equivalencia para X = decodificación (codificar (X)).

Nota: recuerde que para usar el Método de extensión debe importar (!) El espacio de nombres using 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 pequeña variación en la respuesta de andrew.fox, ya que la cadena a decodificar 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; } } } }