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

google-code-prettifyテスト

google-code-prettifyテスト

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

[Rails] deviseのサインアップを無効にする

一瞬で終わる簡単な話だけど一応メモ。 シチュエーション ユーザー登録の無いサイトだが運営者のデー

記事を読む

no image

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

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

記事を読む

no image

JavascriptのDateで月が1つズレる

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

記事を読む

no image

海外VPS「Vultr」の登録からサーバーインスタンス作成まで

Vultrという海外VPNサービスを使ってみました。 なぜ海外 今カナダで就職活動してるので、こ

記事を読む

no image

DockerでRailsとMySQLを使った開発用プロジェクトを作成

Dockerの勉強を兼ねてruby:alpineベースのRails用イメージとMySQLイメージを使

記事を読む

no image

CentOS7.5にanyenvとphpenvでPHP7.2を入れようとした際のエラーと対処まとめ

新しいVPSにanyenvからphpenvを入れようとしたら色々なエラーが出たのでそれぞれの対処メモ

記事を読む

Message

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

PAGE TOP ↑