Javaでプログラムを実行する間にデータを保存する最善の方法は何ですか?私はすでにテキストファイルを使用してその方法で情報を保存できることを知っていますが、プログラムの実行間にプログラムによって生成された情報を格納するためのより良い方法があるのだろうかと思いました。プログラム間でデータを格納する最も良い方法は、Javaで実行されますか?
また、情報を安全に保つための方法はありますか?具体的には、エンドユーザーがアクセスできないようにしたいと考えています。
Javaでプログラムを実行する間にデータを保存する最善の方法は何ですか?私はすでにテキストファイルを使用してその方法で情報を保存できることを知っていますが、プログラムの実行間にプログラムによって生成された情報を格納するためのより良い方法があるのだろうかと思いました。プログラム間でデータを格納する最も良い方法は、Javaで実行されますか?
また、情報を安全に保つための方法はありますか?具体的には、エンドユーザーがアクセスできないようにしたいと考えています。
他 は、プログラムの実行 間のプログラムによってgenereated ある情報を配置するどのような方法があった場合、私は不思議でしたか?
ObjectOutputStream
を使用してファイルにシリアル化し、を使用して元に戻します。
情報を安全に保つために、これを行う方法はありますか? からエンドユーザーにアクセスできますか?
コードは、エンドユーザーのシステム上で実行されている場合は、ノー、データを得ることからそれらを防ぐ方法はありません - それは何とかそれをエンコードしようとしても、あなたの時間価値はない、それはデバッガをアタッチするのは簡単ですので実行中のプログラムの状態を検査します。バイナリ形式では、Javaのシリアライゼーションでは、技術者以外のユーザーが解読できないようになっています。
ファイルの暗号化またはパスワードを使用したローカルデータベース。
Propertiesを情報の保存に使用できます。安全にしたい場合は、encryption streamのようなものを実行してください。
あなたがそれをやりたい場合は、独自のバイナリ形式をロールして暗号化します。 – Esko
db4oを使用してデータを保存できます。これはオブジェクトデータベースであり、暗号化をサポートします。
自分で使ったことはありませんが、これはJDKのjava.util.prefs.Preferencesが元々設計されたものだと思います。
Javaを起動するときに最も便利なのは、ObjectOutputStreamまたはテキストファイルを使用することです。一度経験があれば、データベースを使用できます。
Quick'n'dirty persistence for Javaに興味があります。
シリアル化についてはどうですか?
ユーザーが読むことはできず、比較的簡単です。
他の人が言っているように、データをシリアル化する方法はたくさんあります。 SQLiteのような軽量なものや単純なシリアライゼーションを使うことができます。データを暗号化しようとすると、特にJavaコードの場合は簡単に元に戻すことができるので、データを暗号化しようとする試みはすべて無効になります。
しかし、データの解読方法を理解するためにJavaプログラムのリバースエンジニアリングの複雑さを理解するのに十分な技術者がいない場合、基本的な暗号化方法別の答えで言及し、良いことがあります。あなたがコントロールしていないマシンに何かが常駐しているときは、最も永続的なユーザーがクラックを解消する方法を見つけることができません。
個人的には、sqliteを使用し、フィールドに入力したデータに対して単純な暗号化を使用することをお勧めします。したがって、誰かがローカルDBファイルに接続できるほどスマートであれば、方法。通常のユーザーの99.9%はこのレベルの調査を気にしません。
一部の人々はシリアル化の使用を提案しました。シリアライズにはいくつかの欠点があることに注意してください。
シリアル化は、長期間の保存には適していません。
代わりに、小さな組み込みデータベースを使用することをお勧めします。 (埋め込みデータベースは、プログラムと同じプロセスで実行されるデータベースです)。 SunのJavaにはApache DerbyのバージョンであるJava DBが含まれています。 HSQLDBもあります。これは、組み込みデータベースとして使用できるもう1つの小さく純粋なJavaデータベースです。
XMLはシリアル化技術として、オブジェクトのシリアル化などのバイナリ形式よりも記憶域を調整するプログラムの将来の変更に対して、より弾力性があります。しかし、それは大部分のユーザーによって非常に読みやすく変更可能になります。
非常に単純な圧縮/解凍は、ほぼすべてのユーザーがデータの実際の内容を取得するのを止めます。 GZipInputStream/GZipOutputStreamを現在の書き込みストリームで使用すると、そのジョブが実行されます。あなたが踏み出すことに対するあなたの防衛をより精巧にするほど、あなたのソフトウェアのユーザーに大きな影響を与えるでしょう。
もちろん、圧縮や暗号化の対象となるストリームにシリアル化することを止めるものはありません。それは決して解けるものではありませんが、解けないほどに近いでしょう。それはそれの価値がある場合は?おそらくほとんどの場合そうではありません。 – Fredrik
いいえ。ストリームを暗号化するアプリケーションがエンドユーザーのマシンで実行されている場合、私は書いたように、デバッグモードでデータを実行するのは非常に簡単で、それは暗号化されます(アプリケーションが暗号化キーを含む必要があるという事実を別にして)。 –