1153
  1. 文字列を指定して base64 でエンコードされた文字列を返すにはどうすればよいですか?

  2. base64 でエンコードされた文字列を文字列にデコードするにはどうすればよいですか?

4

11 に答える 11

2085

エンコード

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);
}
于 2012-07-31T15:06:24.827 に答える
55

私は実装をいくつかのきちんとした機能と共有しています:

  • Encoding クラスの拡張メソッドを使用します。理論的根拠は、(UTF8 だけでなく) さまざまなタイプのエンコーディングをサポートする必要があるかもしれないということです。
  • もう 1 つの改善点は、null エントリの null 結果で正常に失敗することです。これは、実際のシナリオで非常に役立ち、X=decode(encode(X)) の同等性をサポートします。

注意: 拡張メソッドを使用するには、キーワード (この場合は) を使用して名前空間(!) インポートする必要があることに注意してください。usingusing 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);
        }
    }
}
于 2016-03-17T20:46:33.613 に答える