アイキャッチ画像

【C#】.Net Framework 4.7以降でBase64URLエンコードを行う方法

.Net Framework 4.7以降でBase64URLエンコードを行う方法を紹介していきます。

紹介環境

当記事は以下の環境で作成しています。

開発環境

  • Visual Studio 2022

Base64URLについて

Base64をURLで扱う場合、「+」「/」「=」が含まれるため扱いずらくなっています。Base64URLはこの問題を解決し、URLで安全に利用することができます。

具体的には、「+」「/」「=」を以下のように変換します。

  • 「+」→「-」に変換します。
  • 「/」→「_」に変換します。
  • 「=」は削除します。

Base64URLエンコードを実装する方法について

.Net Framework 4.7以降でBase64URLエンコードを実装する方法は、以下のようになります。

手順1:Microsoft.Bcl.Memoryをインストールします

Microsoft.Bcl.MemoryのパッケージをNuGetからインストールします。

NuGetからパッケージをインストールする手順は以下の通りです。

手順A:ソリューション エクスプローラーの「参照」を右クリックし、メニューから「NuGet パッケージの管理(N)」をクリックします。

Microsoft.Bcl.Memoryのインストール手順A

手順B:NuGet パッケージ マネージャーの検索欄に「Microsoft.Bcl.Memory」と入力し、「インストール」をクリックします。※この手順は参照タブで行います。

Microsoft.Bcl.Memoryのインストール手順B

Microsoft.Bcl.Memoryの詳細は、以下を参照してください。

手順2:Base64URLを実装します

Base64URLの実装には、Base64Urlクラスを利用します。

以下の例では、Base64URLエンコードにBase64Url.EncodeToStringを利用し、Base64URLデコードにBase64Url.DecodeFromCharsを利用します。

using System;
using System.Buffers.Text;
using System.Text;

namespace SampleApp
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            // Base64URLエンコード ********************************

            byte[] bytes = Encoding.UTF8.GetBytes("Sample");

            // Base64URLエンコード
            string base64urlText = Base64Url.EncodeToString(bytes);

            // 結果:U2FtcGxl
            Console.WriteLine($"結果:{base64urlText}");

            // Base64URLデコード **********************************

            // Base64URLデコード
            byte[] base64urlBytes = Base64Url.DecodeFromChars(base64urlText.ToCharArray());

            string text = Encoding.UTF8.GetString(base64urlBytes);

            // 結果:Sample
            Console.WriteLine($"結果:{text}");

            // ****************************************************
        }
    }
}

Base64Urlクラスは、.Net8以上・.Net Framework 4.7以上で利用することができます。詳細は、参照してください。

終わりに

.Net FrameworkでBase64URLを実装する場合、.Netのように標準実装されているクラスが存在していないので、自作する必要がありました。しかし、Microsoft.Bcl.Memoryが追加され、Base64URLの実装が楽になりました。この記事が役に立てば幸いです。