コーディングに行き詰まった点が出てきましたので
質問をさせて下さい。
どのようにしてデータの暗号化を行うのかについての質問です。
あるアプリケーション内でデータを読み書きしたいのですが、
そのデータが性質上、機密性が高いもので暗号化を行い
ファイルに書き込み、必要なときにデータを読み出し複合化
を行おうと考えております。
javax.cryptoをキーワードに色々ネットやリファレンスで調べて
試してみたのですが、どうも上手く行く方法はありませんでした。
そこでデータの暗号化方法についてご教授頂きたいと思って
おります。
参考までに私が試したものとしては…
1)DEMを使った暗号化
暗号化部分============
KeyGenerator kg = KeyGenerator.getInstance("DES");
SecretKey sk = kg.generateKey();
byte[] m = "Hello Des World".getBytes();
Cipher ch = Cipher.getInstance("DES/ECB/PKCS5Padding");
ch.init(Cipher.ENCRYPT_MODE, sk);
byte[] c = ch.doFinal(m);
=====================
暗号化およびファイルの書き込みには成功…
しかしながらアプリケーションの再起動時のファイルからデータ
読み出し後にキーの取得が出来ないために複合化できません
でした。
(暗号化したときのSecretKey のインスタンスデータと同一
の鍵が必要なのでしょうか?)
2)Blowfishを使った暗号化
暗号化部分============
private final String EncryptoKey = "ENCRYPTO_KEY";
…
SecretKeySpec sksSpec = new SecretKeySpec(EncryptoKey.getBytes(),
"Blowfish");
try {
Cipher cipher = Cipher.getInstance("Blowfish");
cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, sksSpec);
encrypted = cipher.doFinal(EncryptoKey.getBytes());
}
=====================
cipher のインスタンス取得部分でNoSuchAlgorithmExceptionの発生。
(Blowfishというアルゴリズムは使えないのでしょうか?)
> 暗号化およびファイルの書き込みには成功…
> しかしながらアプリケーションの再起動時のファイルからデータ
> 読み出し後にキーの取得が出来ないために複合化できません
> でした。
暗号化に使用するキー(共通鍵)は、
SecretKey sk = kg.generateKey();
で生成しています。
ここで取得するSecretKeyクラスは、Serializableなので、このオブジェクト
をファイルに書き出す(シリアライズする)ことで、復号化出来ると思います。
/*********************************************
有限会社シーリス
代表 有山 圭二
@Address
〒530-0044
大阪市北区東天満二丁目2番5号
第2新興ビル 601
@Web http://www.c-lis.co.jp
*********************************************/
ご教授ありがとうございます。
Serializable出来るのは少し意外に感じましたが
ご指摘頂きました、方法で暗号化した時の鍵の
インスタンスを復元時に取得出来そうです。
しかしながらセキュリティや暗号化について無知な
私ですが疑問に感じてしまう事があります。
それは暗号データを復元する鍵を、暗号化データと共
にファイルとして保持しておくのはセキュリティ上
まずいのではないかという点です。
余談ですが上記のことを考えると私が暗号化して
ファイルに残そうというデータも、ファイル化する
事が好ましくない様に感じてきました。
情報ありがとうございました。少しこちらでもデータの
有り方について検討してみたいと思います。
また、何かありましたら何卒よろしくお願い致します。
On 2月28日, 午後12:15, Keiji Ariyama <keiji_ariy...@c-lis.co.jp> wrote:
> 有山@大阪です。
>
> > 暗号化およびファイルの書き込みには成功…
> > しかしながらアプリケーションの再起動時のファイルからデータ
> > 読み出し後にキーの取得が出来ないために複合化できません
> > でした。
>
> 暗号化に使用するキー(共通鍵)は、
>
> SecretKey sk = kg.generateKey();
>
> で生成しています。
>
> ここで取得するSecretKeyクラスは、Serializableなので、このオブジェクト
> をファイルに書き出す(シリアライズする)ことで、復号化出来ると思います。
>
> /*********************************************
> 有限会社シーリス
> 代表 有山 圭二
> @Address
> 〒530-0044
> 大阪市北区東天満二丁目2番5号
> 第2新興ビル 601
> @Webhttp://www.c-lis.co.jp
> > (Blowfishというアルゴリズムは使えないのでしょうか?)- 引用テキストを表示しない -
>
> - 引用テキストを表示 -