C#] Base64エンコードおよびBase64デコードまとめ


はじめに

Base64とは、マルチバイと文字列やバイナリデータをテキスト形式に変換する方法です。

64種類の英数字を利用してエンコードする方式であり、.NET Frameworkライブラリの「Convert」クラスを利用します。

文字列のBase64エンコード/デコード

早速、文字列に対してエンコード/デコードする方法のご紹介です。

下記のようにBase64クラスを用意して、呼び出すようにしておきます。

一応、文字列の空チェックも入れています。

using System;
using System.Text;

namespace SampleConsoleApp.Sample
{
    class Base64
    {
        /// <summary>
        /// Base64Encode
        /// </summary>
        /// <param name="str">文字列</param>
        /// <returns>エンコード文字列</returns>
        public static string Base64Encode(string str)
        {
            if (string.IsNullOrEmpty(str)) return "";
            var byteData = Encoding.UTF8.GetBytes(str);
            return Convert.ToBase64String(byteData);
        }

        /// <summary>
        /// Base64Decode
        /// </summary>
        /// <param name="base64EncodedData">エンコード済み文字列</param>
        /// <returns>デコード文字列</returns>
        public static string Base64Decode(string base64EncodedData)
        {
            if (string.IsNullOrEmpty(base64EncodedData)) return "";
            var byteData = Convert.FromBase64String(base64EncodedData);
            return Encoding.UTF8.GetString(byteData);
        }
    }
}

上記の使い方は下記の通りである。

using System;
using SampleConsoleApp.Sample;

namespace SampleConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            string encodedText = Base64.Base64Encode("test");
            Console.WriteLine($"Encoded Text : {encodedText}");
            Console.WriteLine($"Decoded Text : {Base64.Base64Decode(encodedText)}");

            Console.ReadKey();
        }
    }
}

実行した結果は下記の通りである。

Encoded Text : dGVzdA==
Decoded Text : test

ファイルに対するBase64エンコード/デコード

ファイルの内容をBase64エンコードし、文字列として取得する方法です。

また、エンコードした内容をデコードしてファイルに保存する方法の備忘録です。

using System;
using System.Text;

namespace SampleConsoleApp.Sample
{
    class Base64
    {
        /// <summary>
        /// Base64Encode (File)
        /// </summary>
        /// <param name="path">ファイルパス</param>
        /// <returns></returns>
        public static string Base64FileEncode(string path)
        {
            if (string.IsNullOrEmpty(path)) return "";
            if (!File.Exists(path)) return "";
            var bytes = File.ReadAllBytes(path);
            return Convert.ToBase64String(bytes);
        }

        /// <summary>
        /// Base64Decode (File)
        /// </summary>
        /// <param name="outpath">出力ファイルパス</param>
        /// <param name="base64EncodedData">エンコード済み文字列</param>
        public static void Base64FileDecode(string outpath, string base64EncodedData)
        {
            if (string.IsNullOrEmpty(base64EncodedData)) return;
            var bytes = Convert.FromBase64String(base64EncodedData);
            File.WriteAllBytes(outpath, bytes);
        }
    }
}

今回はテスト用に下記INIファイルを用意した。(test.ini)

BAR1=ABC
; Test Ini File
; Test Section 1

[Section1]
BAR=ZZZZ
FOO=BBB
; Test Section 2

[Section2]
FOO=CCC
TEST=12345

上記のようなINIファイルを今回用意したBase64エンコード処理に当てはめてみると下記のような感じになります。

using System;
using SampleConsoleApp.Sample;

namespace SampleConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            string fileEncodedText = Base64.Base64FileEncode(@"C:\Work\test.ini");
            Console.WriteLine($"Encoded Text : {fileEncodedText}");
            Base64.Base64FileDecode(@"C:\Work\decoded.ini", fileEncodedText);

            Console.ReadKey();
        }
    }
}

実行した結果のBase64エンコード文字列は下記の通り

Encoded Text : QkFSMT1BQkMNCjsgVGVzdCBJbmkgRmlsZQ0KOyBUZXN0IFNlY3Rpb24gMQ0KDQpbU2VjdGlvbjFdDQpCQVI9WlpaWg0KRk9PPUJCQg0KOyBUZXN0IFNlY3Rpb24gMg0KDQpbU2VjdGlvbjJdDQpGT089Q0NDDQpURVNUPTEyMzQ1DQoNCg==

Base64.Base64FileDecodeにて、エンコードした内容をデコードして再保存すると、元の結果に戻っているはずです。

よくメール送信等で利用されていますね。

最後に

いかがでしたでしょうか。

Base64エンコード/デコード処理はさまざまな状況で利用されるため覚えておくと良いかと思います。