JavaでBase32のデコーダーを実装

公開日: : Java, Record ,

Pocket

今書いてるプログラムでBase32エンコードされた文字列をデコードをする必要があったんですが、Java標準ライブラリにそういうクラスは無く、Apache Commonsで提供されているみたいですが、練習を兼ねて車輪の再発明をしました。

エンコードの仕組みについてはこちらのサイトを参考にさせて頂きました。
base32 についてメモ
ここで書かれていることの逆を実装していきます。

作ったクラスのコードはこちら
https://github.com/yoshi-self/Base32Decoder/blob/master/com/yoshi_self/Base32Decoder.java

以下解説

Base32エンコードは40bit(5byte)単位で8文字に変換される

なので8文字単位でデコードしていき最後につなげます。

40bit(8byte)をデコード

40bitのBitSetを作成します

ABCDEFGHIJKLMNOPQRSTUVWXYZ234567の配列を作成しておき、1バイトごとに対応する数値を取ります。

この数値の下位5ビットをBitSetにセットします。

5byteのbyte[]を作り、BitSetと同じ並びにビットをセットします。(BitSet.toByteArray()を使うと順番がおかしくなります)

結果を返す

最初charsetとか考えず5の倍数バイト全部返してて、それじゃダメだと気づいて0のバイト捨てるように直したんですが、更に考えてみると、オリジナルの文字コードが何バイトで意味をもつかわからないので結局charsetを指定させる実装にしました。

っていうかこのブログのコード表示ブロックの記号がエスケープされたままになってる…WordPressが自動エスケープしたあとpreとかで出てるからだろうか…そのうち直します。。

関連記事

no image

[PHP]メンバ変数に可変関数を入れて呼び出せない

メンバ変数func_nameに関数名を入れた際、$ClassName->func_name()みたい

記事を読む

no image

google-code-prettifyテスト

google-code-prettifyテスト

記事を読む

no image

Bashのプロンプトを変えずにscreenのウィンドウタイトルだけ変える

先にコード例。.bashrcに書きます。 この例ではウィンドウ名が「ユーザー名:カレンドディレ

記事を読む

no image

Google Play Musicアプリの音楽ライブラリから特定のフォルダを除外する方法

Google Play Musicアプリはデフォルトでローカル端末上の全ての音楽ファイルをリストアッ

記事を読む

no image

JavascriptのDateで月が1つズレる

とかやった時になんか現在月より1つズレると思ったら、Dateクラスのmonthは0~11なのでし

記事を読む

no image

Djangoでエラー「(2019, “Can’t initialize character set utf8mb4 (path: /usr/share/mysql/charsets/)”)」

twitter関連で絵文字も格納するためDBの文字コードをutf8mb4にしたプロジェクトを久々にい

記事を読む

no image

gでgit status、続く引数があったらgitに渡すシェルスクリプトを実装したメモ

最近コーディング時に腕の疲れを感じるようになってきたので、アホみたいでもなるべく短いaliasを.b

記事を読む

no image

『ワードバスケット攻略データベース』を作成しました

『ワードバスケット攻略データベース』を作成しました。 ワードバスケットとはカードを使ったしりとりのよ

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

no image
gでgit status、続く引数があったらgitに渡すシェルスクリプトを実装したメモ

最近コーディング時に腕の疲れを感じるようになってきたので、アホみたいで

no image
JavaでBase32のデコーダーを実装

今書いてるプログラムでBase32エンコードされた文字列をデコードをす

no image
Bashのプロンプトを変えずにscreenのウィンドウタイトルだけ変える

先にコード例。.bashrcに書きます。 この例ではウィンドウ名

no image
Google Play Musicアプリの音楽ライブラリから特定のフォルダを除外する方法

Google Play Musicアプリはデフォルトでローカル端末上の

no image
PythonでC++のstd::mapみたいな挙動が欲しい

最近競技プログラミングの問題をちょろちょろやってて、それでC++を使っ

→もっと見る

PAGE TOP ↑