Как кодировать и декодировать строку base64?

  1. Как вернуть строку с кодировкой base64 с заданной строкой?

  2. Как декодировать строку с кодировкой base64 в строку?

шифровать

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

раскодировать

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

Я делюсь своей реализацией с некоторыми опрятными функциями:

  • использует методы расширения для classа Encoding. Обоснование заключается в том, что кому-то может потребоваться поддержка различных типов кодировок (не только UTF8).
  • Еще одно улучшение изящно с нулевым результатом для нулевой записи – оно очень полезно в реальных сценариях и поддерживает эквивалентность для X = decode (encode (X)).

Примечание. Помните, что для использования метода расширения вам необходимо (!) Импортировать пространство имен с using ключевого слова (в данном случае using MyApplication.Helpers.Encoding ).

Код:

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

Пример использования:

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

Небольшое отклонение в ответе andrew.fox, так как строка для декодирования может быть неправильной строкой, закодированной base64:

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

Основываясь на ответах Эндрю Фокса и Cebe, я развернул их и сделал их строковыми расширениями вместо расширений 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; } } } 
  • Почему я не могу открыть avi-видео в openCV?
  • Как избежать проблемы «слишком много параметров» в дизайне API?
  • Преимущества встроенных функций в C ++?
  • Почему в нашем проекте требуются интерфейсные слои / абстрактные classы?
  • byte в hex string
  • Утечка памяти в C #
  • Что означает «L» перед строкой в ​​C ++?
  • Исключать определенные расширения файлов при получении файлов из каталога
  • Почему метод classа C #, реализованный в classе, должен быть общедоступным?
  • Символ ':', шестнадцатеричное значение 0x3A, не может быть включен в имя
  • Вызывает ли std :: list :: remove метод деструктор вызова каждого удаленного элемента?
  • Interesting Posts
    Давайте будем гением компьютера.