1. 概要

このチュートリアルでは、Kotlinで文字列をBase64にエンコードおよびデコードするためのいくつかの一般的な方法について説明します。

2. 基本

Base64は、バイナリデータをテキストとして転送するために現代のWebアプリケーションで主に使用されるバイナリからテキストへのエンコーディングスキームです。 名前が示すように、 Base64番号システムには64個の記号があり、[A-Za-z0-9 + /]文字セットにマップされます:

Base64エンコーディングを使用して文字列「Baeldung」をエンコードするとします。

まず、元の文字列の各文字を、ASCII表現の8ビットのバイナリ値として表す必要があります。 次に、8ビットストリームを6ビットストリームにグループ化し、6ビット値ごとにBase64インデックスを取得します。 最後に、Base64マッピングテーブルを使用して、インデックスに対応するBase64桁を取得します。

3バイトのバイナリデータを4つのBase64桁で表すことができることがわかります。 さらに、ストリームの最後にある各6ビットのゼロパディングは、=記号で表されます。

最後に、「QmFlbGR1bmc=」は文字列「Baeldung」のBase64表現であると結論付けることができます。

3. Base64ユーティリティ

java.util.Base64ライブラリを使用して、Kotlinで文字列をエンコードおよびデコードできます。

まず、エンコーダーを使用して「Baeldung文字列をエンコードしましょう。

val originalString = "Baeldung"
val encodedString: String = Base64.getEncoder().encodeToString(originalString.toByteArray())
assertEquals("QmFlbGR1bmc=", encodedString)

内部的には、 Base64クラスのgetEncoder()メソッドにより、RFC4648で説明されているエンコード標準に準拠したエンコーダーが取得されます。

次に、 Base64クラスのgetDecoder()メソッドを使用して、Base64文字列表現を元のテキストにデコードします。

val encodedString = "QmFlbGR1bmc="
val decodedString: String = String(Base64.getDecoder().decode(encodedString))
assertEquals("Baeldung", decodedString)

「QmFlbGR1bmc=」が文字列「Baeldung」の正しいBase64表現であることを検証しました。

getEncoder()メソッドと同様に、 getDecoder()メソッドもRFC4648標準に準拠したBase64デコーダーを返します。

4. ApacheCommonsBase64コーデック

Apache Commons Base64forBase64を使用して文字列をエンコードおよびデコードする方法を学びましょう。

まず、commons-codec依存関係をプロジェクトのpom.xmlに追加する必要があります。

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version>
</dependency>

次に、 java.util.Base64クラスとの名前の競合を防ぐために、ApacheBase64などのエイリアスを使用してKotlinクラスにorg.apache.commons.codec.binary.Base64を明示的にインポートする必要があります。

import org.apache.commons.codec.binary.Base64 as ApacheBase64

次に、 ApacheBase64 クラスのインスタンスを作成し、それを使用して文字列「Baeldung」をエンコードしましょう。

val originalString = "Baeldung"
val base64: ApacheBase64 = ApacheBase64()
val encodedStr = String(base64.encode(originalString.toByteArray()))
assertEquals("QmFlbGR1bmc=", encodedStr)

toByteArray()メソッドを使用して、文字列のバイト配列表現を取得してから、 encode()methodに渡すことに注意する必要があります。

同様に、 decode()メソッドを使用して、文字列「QmFlbGR1bmc=」のデコードを検証しましょう。

val encodedString = "QmFlbGR1bmc="
val base64: ApacheBase64 = ApacheBase64()
val decodedString: String = String(base64.decode(encodedString))
assertEquals("Baeldung", decodedString)

ここで、 decode()メソッドはバイト配列表現を返します。 したがって、元の String オブジェクトに対して検証するには、Stringオブジェクトを取得する必要があります。

5. 結論

この記事では、Base64エンコーディングの基本を学び、java.util.Base64やApacheCommonsBase64 CodecforBase64などのライブラリを使用して文字列をエンコードおよびデコードしました。

いつものように、チュートリアルの完全なソースコードは、GitHubから入手できます。