2012-03-22 16 views
0

メモ/ステッカー/アラーム/電話帳を作成し、db4o(埋め込み)を使用してオブジェクトを.dbファイルに保存するアプリケーション(Amnesia)があります。Java Classオブジェクト暗号化/復号化およびオブジェクトデータベース

私がやっていることは、データを保護するために暗号化/復号化を追加することです。私がしたいことのプロセスを説明しましょう:

初めてアプリケーションをインストールして実行すると、パスフレーズが尋ねられます。次に、そのパスフレーズを使用して、データベースの最初の初期化時に作成されたデモ・データと、後で実行されるすべてのエントリの暗号化/復号化が行われます(最初にデータベースがない場合は実行されます)。デモデータが入力されます)。

ユーザーがアプリを開くたびに、パスフレーズが入力されます。ユーザーがパスフレーズを入力すると、アプリケーションはデータベースからの読み取りを試み、データを復号化します。復号化に失敗した場合は、ユーザが「間違った」(最初に使用したものとは異なる)パススルーを入力したことを意味し、アプリケーションは終了します。

私はこれが可能かどうか質問したいと思いますか? Googleでの検索では、文字列のようなオブジェクトの暗号化/復号化が見つかっただけで、他のオブジェクトの場合は、唯一のチュートリアルでは例をシリアル化していました。データベースへの呼び出しが非常に頻繁に行われるため、保存または読み取りがデータベースに行われるたびに(すべてのシリアライゼーションの例のように)ファイルからデータをエクスポート/インポートする必要はなく、un生産することができます)。

オブジェクトが書き込まれる(保存される)たびに単純な暗号化が行われ、オブジェクト/クラスが.dbファイル(埋め込みdb4o)からクエリ/取得されるたびに復号化されます。

これはできますか?

(私の他の選択肢は、.iniのような外部ファイルを使用して暗号化されたユーザーパスワードを保存し、アプリが起動するたびにユーザーの入力でパスワードを確認することですが、それははるかに安全です)

+0

パスワードの 'md5'(または他の暗号化)を.dbに保存するのはどうですか? –

+0

@SérgioMichels、MD5は暗号化アルゴリズムではありません。残念ながらdoesntのがあることを持っているように見える –

+0

Sé[email protected]、ヴァッシュは正しいですが、返信に感謝:) – George

答えて

1

オブジェクトを暗号化しようとしないでください。データベースを暗号化します。

db4oには独自の暗号化は含まれていませんが、追加することはできます。データを暗号化するカスタムのStorage実装を記述する必要があります。普通のFileStorageをラップし、暗号化を追加するStorageDecoratorのサブクラスを書くことでこれを行うことができると思います。それでsetting it on the FileConfigurationでそれを使うことができます。

+0

ので、私は右理解していれば、ユーザーの初期パスフレーズでencypted穴の.dbファイルを作成するために示唆され、その後、アプリでファイルの復号化を行うカスタム関数を持つことを確認しそれは書き込み/読み取り可能なように起動? – George

+0

起動時にファイル全体を復号化する必要はありません。あなたはその場でブロックを解読することができます。あなたの 'Storage'実装は主に' Bin'(たぶん 'BinDecorator')を作成する責任があり、そこには[read](http://community.versant.com/Documentation/Reference/db4o-8.1/java/)を実装しています。 API/COM/db4oの/ IO/Bin.html#%の28longを読み取り、%の20byte []、%20int%29)および[書き込み](http://community.versant.com/Documentation/Reference/db4o-8.1/java /api/com/db4o/io/Bin.html#write%28long,%20byte[],%20int%29)、データの復号化と暗号化を行います。 –

0

アプリケーションの初期起動は、CPUの負荷が大きくなります。

しかし、それはあなたがこのプロセスになりたいものだ場合:

リクエストパスワード

デシベルでそれを更新し、それを暗号化し、オブジェクトにeverysingle表/行をフェッチします。

暗号化/復号化に関しては、 OSに依存しない場合のために、クロスプラットフォームの互換性のために個人的にAES 128をご提供します。

Java SUN AES

+0

実際には、テーブル/行はありません。 db4o自体はオブジェクトのデータベースなので、そこに格納されているものはすべてオブジェクトです。ですから、私の最も基本的な質問は、文字列以外のオブジェクトを暗号化する方法でした(例えば、MEMOクラスのオブジェクトを暗号化することは熱いです)。迅速な回答DORといえAES提案のための:) – George

+0

変換オブジェクトおかげでバイトを[]それはシリアル化 をチェック –

+0

良い解決策だと思わ暗号化[Javaのシリアライズ日](http://java.sun.com/developer/ technicalArticles /プログラミング/シリアライズ/) –

関連する問題