KotlinでBase64変換を行う例
外部システムとバイナリデータを受け渡しする際など、データをBase64エンコードしたいケースがあると思います。
このような時、KotlinでBase64変換するには以下の行います。
逆にBase64エンコードされた文字列をデコードしたい場合の例は以下のようになります。
Base64変換のメリデメ
Base64変換におけるメリット / デメリットとしては以下の内容が挙げられます。
- メリット
- バイナリデータのやりとりに対応していないI/Fでも、データのやり取りが可能になる。
サーバAPI(REST API)では、パラメータをJSONやXMLでやり取りすることが多いと思いますが、このようなケースでも画像などのバイナリデータをやり取りすることが可能になります。
※メリットは、ほぼこの1点に限られると思います。
- バイナリデータのやりとりに対応していないI/Fでも、データのやり取りが可能になる。
- デメリット
- データサイズが大きくなってしまう。
Base64変換前のデータと比較し、約1.37倍大きくなります。
これに伴い、通信量やストレージ使用量を増加させることにつながります。 - 処理負荷の増大。
変換するひと手間が加わる分、単純に処理量が増大してしまいます。
- データサイズが大きくなってしまう。
元のデータサイズに比例して変換後のデータサイズも大きくなるため、あまり大容量のデータでの使用は適しません。
Base64の仕組み
上記メリデメでデータサイズが大きくなってしまうと書きましたが、これはBase64変換の仕組み上の理由から発生します。
なぜ増えてしまうのかを理解するために、変換の仕組みを解説します。
Base64の変換は大雑把に説明すると以下の手順になります。
- 元データを6bit区切りにする(余りは’0’を付与して6bitになるようにする)
- 6bit区切りにしたデータを変換表を元に文字列化
- 変換後の文字数が4の倍数になるように’=’を付け加える
上記手順の流れを図で表すと以下のようになります。
変換の手順の中で、パディング追加や6bitを1文字(8bit)に変換することから、データ長が増えてしまいます。
Base64変換表
ビット列 | Base64文字 | ビット列 | Base64文字 | ビット列 | Base64文字 | ビット列 | Base64文字 |
---|---|---|---|---|---|---|---|
000000 | A | 010000 | Q | 100000 | g | 110000 | w |
000001 | B | 010001 | R | 100001 | h | 110001 | x |
000010 | C | 010010 | S | 100010 | i | 110010 | y |
000011 | D | 010011 | T | 100011 | j | 110011 | z |
000100 | E | 010100 | U | 100100 | k | 110100 | 0 |
000101 | F | 010101 | V | 100101 | l | 110101 | 1 |
000110 | G | 010110 | W | 100110 | m | 110110 | 2 |
000111 | H | 010111 | X | 100111 | n | 110111 | 3 |
001000 | I | 011000 | Y | 101000 | o | 111000 | 4 |
001001 | J | 011001 | Z | 101001 | p | 111001 | 5 |
001010 | K | 011010 | a | 101010 | q | 111010 | 6 |
001011 | L | 011011 | b | 101011 | r | 111011 | 7 |
001100 | M | 011100 | c | 101100 | s | 111100 | 8 |
001101 | N | 011101 | d | 101101 | t | 111101 | 9 |
001110 | O | 011110 | e | 101110 | u | 111110 | + |
001111 | P | 011111 | f | 101111 | v | 111111 | / |
※システムによっては上記以外の変換表を用いているケースもあります
おわりに
ただ使うだけであれば簡単なBase64も、仕組みや背景を調べてみると奥が深く、また複雑であることがわかります。
こういった背景知識があると問題が起きた際の調査の手掛かりになったりすることもあるので、本記事が皆さんの知識取得の一助になればうれしいです。
コメント