前置き
共通鍵でファイル暗号化と復号を実装する。
仕様は下記の通り
- アプリケーション起動時に暗号キーを生成
- keygenファイルがある場合は同ファイルからキーを生成
- keygenファイルがない場合は新たにキーを生成してkeygenファイルに保存する
- ファイルを選択する
- 暗号化ボタンで選択ファイルを暗号化
- 選択ファイルと同じ場所にencディレクトリを作成する
- encディレクトリ内に暗号化ファイルを.datで保存する
- 復号ボタンで選択ファイルを復号
- 選択ファイルが暗号ファイルではない場合は何もしない
- 選択ファイルと同じ場所に復号ファイルを保存
- MD5ボタンでハッシュ値を生成
ポイント
セキュリティキーについて
KeyGenerator.generateKey()は生成する度に異なるキーが生成される。
前述のことから、そのまま実装するとアプリケーションの起動毎に異なるキーが生成されてしまい、
初回で暗号化したファイルを、2回目以降に起動したアプリケーションから復号を試みても、エラーが発生してしまう。
なので、同じ生成キーで暗号化と復号をしたい場合は、生成キーを保管する必要がある。
SecretKeyはシリアライズされているので、生成キーはファイル保存しておくことが可能。
今回は、keygenという名前のファイルでセキュリティキーを管理している。
ハッシュ値について
ハッシュ値は改ざん検知のために利用されることが非常にしばしばある。
MD5の他にもSHAなどのアルゴリズムが用意されており、ダウンロードサイトにファイルのハッシュ値が添えられていることがあり、
ダウンロード後にダウンロードファイルのハッシュ値を生成して、改ざんを検知するために利用されている。
今回は、暗号化と復号の前後でハッシュ値を生成して比較する事によって、同じファイルが復号できていることを確認できるようになっている。
また、ハッシュ値の非可逆性を利用して、パスワードのハッシュ値を生成し、認証処理に利用されることもある。
実装
FXDemo.fxml
FXDemo.java
実行結果
コメント 0