Kotlin

【Kotlin入門】Base64でエンコードとデコード

暗号化するほどのデータでもないけど、なんとなく生で流すのが嫌なデータってありますよね。
(通信経路の暗号化とは別の話です)

そんな時は簡易的に情報を Bse64 でエンコードして、送信先でデコードしてもらう手段も検討されます。

逆に相手からエンコードされた情報をもらい、こちら側でデコードする場面も想定しておくといいかもしれません。

無駄に鍵を共有して AES で暗号化するとか、そこまでする必要のないデータもありますからね。

今回は、Kotlin で Base64 のエンコードとデコードを試してみたいと思います。

Base64エンコード

Kotlin で Base64 を使用する場合は、以下の Java のパッケージを利用します。

エンコードする場合は、バイト文字列を Base64 文字列に変換してあげます。

結果は以下の通りです。

YWJjZGVmZw==

試しに Linux の base64 コマンドでデコードして確認してみます。

元の文字列に戻りましたね。ちなみに、Mac のターミナルだと base64 のデコードは -D オプションになります。

Base64デコード

次に、Kotlin で Base64 デコードを試してみます。

こちらも、Base64 のパッケージを利用するだけなので簡単です。

結果は以下の通りです。

abcdefg

エンコードやデコードの失敗

エンコードはともかく、第三者から送られてくるデータをデコードする場合は要注意です。

Base64 でエンコードした文字列から複合化できない場合に例外が発生するからです。

上記でエンコードした「YWJjZGVmZw==」は、最後の Zw が 4 文字に満たないため == で 2 文字分吸収しているところがあります。ここをなぜか === の 3 文字にされて送信されてきたと仮定します。

YWJjZGVmZw===

この文字列を Base64 でデコードしてみます。

想定通り例外が発生しました。

Exception in thread “main” java.lang.IllegalArgumentException: Input byte array has incorrect ending byte at 12
at java.util.Base64$Decoder.decode0(Base64.java:742)
at java.util.Base64$Decoder.decode(Base64.java:526)

よって、事前に IllegalArgumentException をハンドリングできるようにしておきましょう。

結果はもちろん以下になります。

デコードできない文字列が送られてきました