私はデータ(コードの公開は主な問題ではありません)ファイルを保護する必要があるプロジェクトに取り組んでいます。 Java + Netbeansを使用しています。暗号化された形式でjarを作成する機能はありますか?データベースにもsqliteを使用しています-したがって、暗号化された形式でテキストファイルを配置することも適切なオプションではありません。
実行中のJavaVMは、実行したいデータを何らかの方法で読み取れる必要があるため、暗号化されたJARを作成することはできません。また、a VM)と同様に、適切なツールとノウハウを持っている人なら誰でも、JARからすべてのデータを抽出することができます。
JARを暗号化できる場合は、暗号化の目的をまったく無効にするJARを実行するクライアントに復号化キーまたは機能を提供する必要もあります。
あなたが得ることができる最善のものは難読化ですが、それは野心的な攻撃者にとって本当のセキュリティやハードルではありません。
Kosi2801に同意します。クラスファイルの暗号化はセキュリティの模倣にすぎません( http://www.excelsior-usa.com/articles/Java-obfuscators.html を参照)カスタムClassLoaderを使用すると、アプリケーションが破損する可能性があります。アプリケーションサーバーで。
より良い方法があります:クラスファイルで文字列定数の暗号化を使用します。ほとんどの商用難読化ツールにはこの機能があります。たとえば、 Allatori 、 Stringer Java Obfuscation Toolkit 、 Zelix KlassMaster 、 Smokescreen 、 DashO (超高額)。StringerJava Obfuscatorには呼び出しコンテキストチェックと完全性制御機能は、保護をハッキングするのを非常に困難にします。
最も安全な方法は、JavaCardなどの外部デバイスにバイトコードの一部を保存して実行することです。
N.B.私はLicelLLCのCEOです。ストリンガーの開発者Java難読化ツール。
Kosi2801はほぼ正しいです。私があなたにできると思う唯一のことは次のことですが、それは醜いです。
これにより、クラスをロードできます。同じことを(クラスローダーなしで)実行して、他のリソースをロードすることもできます。
実装するのは楽しいですが(チャレンジが好きな人のために)、これにはいくつかの問題があります:
だからあなたは人々に回り道を与えて物事を難しくすることができます、しかしあなたがあなたがすることができるすべてを与えた状況ではそれを他の人が投資しなければならない時間の価値がないようにすることです。
ソフトウェアの保護は、特にJavaのように、簡単に逆コンパイルでき、C/Assemblyのように独自のコードを変更できない場合は、困難です。最も高価なソフトウェアのいくつかには理由があります。ハードウェアドングルが必要であるか、特定のCPUまたは他のハードウェアにロックされています。
一般に、アプリとそのデータを自己完結型にする場合、これを安全な方法で行う方法はありません。ただし、確かにファイルを暗号化し、コードに埋め込まれたキーを使用してファイルを記述できます。断固としたハッカーはそれを手に入れることができますが、それがあなたが心配していることではない場合は、問題ありません。これを行う場合、暗号化されたデータは圧縮できないため、最初に圧縮してから暗号化することに注意してください。
データを本当に安全にする必要がある場合(機密データなど)、キーを使用してデータを暗号化し、そのキーをアプリに提供する必要があります。たとえば、サムドライブにデータを配置して、安全な宅配便によるユーザー。
もう1つの可能性は、SSLを介してデータ(またはキー)を利用できるようにし、適切な認証方法を使用してユーザーが誰であるかを確認することです。
一般的に、どのシステムも完全に安全であるということは不可能ですが、それは必須ではありません。システムは、攻撃者がシステムをクラックしようとしていると思われることを思いとどまらせるのに十分なだけ安全である必要があります。
もう1つのオプションは、JARをその場で復号化するカスタムJVMを作成することです。ただし、同じ問題が残ります。ある時点で、JAR JavaクラスをJVMで実行するために復号化する必要があり、その時点で、クラスをキャプチャして逆コンパイルできます。
言うまでもなく、カスタムJVMを使用すると、すべてのユーザーがそのJVMもダウンロードする必要があります。
CipherOutputStreamとCipherInputStreamを使用して、Javaオブジェクトを暗号化された形式でディスクにシリアル化できます。これは、データを保存するために開いているオプションです。