質問

Java にプロパティ ファイルがあり、ロゴ画像ファイル名、データベース名、データベース ユーザー、データベース パスワードなど、アプリのすべての情報が保存されています。
パスワードを暗号化してプロパティ ファイルに保存できます。
ただし、逆コンパイラーを使用して、キーまたはパスフレーズを jar から読み取ることができます。
db パスをプロパティ ファイルに安全に保存する方法はありますか?

役に立ちましたか?

解決

これを管理するには複数の方法があります。アプリケーションの起動時にユーザーにキーストアのパスワードを入力させる方法を見つけられた場合、最も適切な方法は、キーを使用してすべての値を暗号化し、このキーをキーストアに保存することです。キーストアへのコマンド ライン インターフェイスは keytool を使用します。ただし、JSE にはプログラムでキーストアにアクセスするための API もあります。

起動時にユーザーに手動でキーストアにパスワードを入力させる機能がない場合 (Web アプリケーションなど)、そのための 1 つの方法は、キーを難読化して保存できる非常に複雑な難読化ルーチンを作成することです。プロパティファイルも。覚えておくべき重要なことは、難読化および難読化解除のロジックは多層化する必要があるということです (スクランブル、エンコード、偽の文字の導入などが含まれる可能性があります)。など)、それ自体に、直感的ではない名前を使用してアプリケーション内の他のクラスに隠蔽できるキーが少なくとも 1 つある必要があります。これは完全に安全なメカニズムではありません。なぜなら、逆コンパイラを持ち、かなりの時間と知識を持っている人ならまだこのメカニズムを回避できるかもしれませんが、ネイティブに侵入する必要がないメカニズムは私が知る限りこれだけです。容易に逆コンパイルできない) コード。

他のヒント

パスワードの SHA1 ハッシュをプロパティ ファイルに保存します。次に、ユーザーのパスワードを検証するときに、ログイン試行をハッシュし、2 つのハッシュが一致することを確認します。

これは、いくつかのバイトをハッシュするコードです。を使用すると、文字列からバイトを簡単にゲル化できます。 getBytes() 方法。

/**
     * Returns the hash value of the given chars
     * 
     * Uses the default hash algorithm described above
     * 
     * @param in
     *            the byte[] to hash
     * @return a byte[] of hashed values
     */
    public static byte[] getHashedBytes(byte[] in)
    {
        MessageDigest msg;
        try
        {
            msg = MessageDigest.getInstance(hashingAlgorithmUsed);
        }
        catch (NoSuchAlgorithmException e)
        {
            throw new AssertionError("Someone chose to use a hashing algorithm that doesn't exist.  Epic fail, go change it in the Util file.  SHA(1) or MD5");
        }
        msg.update(in);
        return msg.digest();
    }

いいえ、ありません。たとえ暗号化したとしても、それを解読するコードは誰かが逆コンパイルしてしまいます。

パスワード (直接 DB パスワードまたはキー パスフレーズのいずれか) 用に別のプロパティ ファイル (jar の外部) を作成し、そのプロパティ ファイルをディストリビューションに含めないようにすることもできます。あるいは、サーバーが特定のマシンからのログインのみを受け入れるようにして、なりすましが必要になるようにすることもできます。

上記で説明したパスワードの暗号化に加えて、パスワードを別のプロパティ ファイルに置き、展開時にこのファイルに可能な限りロックダウンされたアクセス許可を与えるようにしてください。

たとえば、アプリケーション サーバーが Linux/Unix 上で実行されている場合、 root 次に、パスワードプロパティファイルを所有者にします root 400/-r-------- 権限。

もちろん、何らかの方法で認証した後、アプリが https 経由でサーバーに接続し、パスワードをダウンロードすることはできませんか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top