多分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()などで型変換しても上手くはいかない。