多分4/2位にハマったことのまとめ

こういうことをやろうとしたらハマった(*_*;

1.javax.crypto.Cipherを使って暗号化(結果はbyte)
2.DB登録するためにnew String()でString型に変換
3.登録出来たと仮定して2)をgetBytes()でbyte
に戻してjavax.crypto.Cipherで復号化。

[結果]
3の時にjavax.crypto.IllegalBlockSizeExceptionが発生し、処理終了。

色々調べてみると

Stringは文字列用のクラスなので、
暗号化した結果、コードページ932にない文字コードになってしまう。
よって元に戻しても同じにならない。

とのこと。

この処理の流れでは出来ないらしい。
でも、数年前に参加していたプロジェクトでは、
暗号化した文字をString型で入れいた気がするのだが???

と、思いもう少し調べてみる。

とあるブログに、

またバイト配列を16進文字列に変換するためCommons Codecを使用した。

これか!!

と思い、試してみると上手くいった!!

org.apache.commons.codec.binary.Hexを使い

○byte→16進文字列
Hex.encodeHex(byte
)
○16進文字列→byte
Hex.decodeHex(hoge.toCharArray())

[まとめ]
暗号化した文字列(byte)をString型でDB登録したい場合は、
一度16進文字列にして登録すればよい。
直接new String()などで型変換しても上手くはいかない。