Javaアプリで設定情報を保存する方法 (ファイル暗号化編)

Javaアプリで設定情報をXML形式で保存する、という記事を書きました。

参考: Javaアプリで設定情報を保存する方法 (XML編)

ファイルがXML形式で保存され、見やすいのはいいのですが、例として挙げたブログ情報の中にはユーザ名やパスワードが含まれており、それがプレーンテキストで保存されている状態はセキュリティ的にどうかと思います。

この手の設定情報を保存するなら、暗号化して保存した方がいいですね。

ブログ情報を暗号化して保存し、復号して読み込む

今回も、前回同様にブログ情報を保存するクラスを使いましょう。

BlogInfoクラス

このBlogInfoクラスを暗号化して保存し、暗号化して保存されたファイルを複合して読み込むクラスは次のようになります。

BeanFileCryptoIOUtilクラス

前回のコードと見比べてみるとわかりますが、暗号化するための仕掛けを施しているところが違います。
といっても、実質保存で4行、読み込みで4行違うだけですね。

暗号化して保存するためのCipherクラス、CipherOutputStreamクラス

66〜73行目は、暗号化するためにCipherクラスを用意しています。

書き込む際にはCipherOutputStreamクラスを使って書き込んでいます (75〜77行目)。

FileOutputStreamをCiperOutputStreamでくくるだけ、という感じですね。
これだけで暗号化したファイルが作れちゃいます。

ちなみに、「Blowfish」という暗号化アルゴリズムで暗号化しています。
このアルゴリズムはSSHやファイル暗号化ソフトウェアなどに広く利用されているとのこと (Wikipediaより)。

暗号化する際に必要となるキーは”nurukunai”としています。

暗号化されたファイルを読み込み復号するためのCipherクラス、CipherInputStreamクラス

30〜37行目では復号するためにCipherクラスを用意しています。
特に37行目のDECRYPT_MODEに注意してください。
(保存するときはENCRYPT_MODEでしたね)

読み込む際にはCipherInputStreamクラスを使っています (39〜41行目)。

こちらはFileInputStreamをCipherInputStreamでくくるだけ、といった感じですね。

実際にBeanFileCryptoIOUtilクラスを使ってみよう

それでは、実際に先のBeanFileIOUtilを使ってみましょう。

このプログラムで保存したファイルはこんな感じになります。

ss_201312040201.png

この記事の冒頭でお見せしたのと同じ内容のはずですが、普通の人間が見ても何のことやらサッパリわからない感じですね。
ちゃんと暗号化できています。

これが読み込みできていますので、復号もできています。

ということで、手軽に情報保存したいんだけど暗号化しておきたい、という場合は、今回紹介したようにCipherクラスとCipherOutputStreamクラス、CipherInputStreamクラスを使ってファイルの読み書きをしましょう。

なお、Cipherを準備するあたりで「Blowfish」以外の暗号化アルゴリズムを指定することもできます。
必要に応じてアレンジしてみてください。
(個人的に利用する分には、「Blowfish」という暗号化アルゴリズムで全く問題ないと思います)

元大手電機メーカのシステムエンジニア。 詳しくはこのサイトについての「サイト管理者について」をご覧ください。

無料メールセミナー