4

FTPを使用してファイルをロードするアプリケーションを作成しています。コードは次のようになります。

String username = "username";
String password = "password";

しかし、コンパイルした後、私はそれらを.classファイルで見ることができます。コンパイルされたコードは次のようになります。

\00username\00password

したがって、問題は、コンパイルされたコードでパスワードを確認してログインできることです。それは良くないと思います。Javaにバイトコードの文字列をコンパイルさせるにはどうすればよいですか?

4

4 に答える 4

5

文字列リテラルを「バイトコード」にコンパイルするようなものはありません。文字列にはバイト表現がありますが、お気づきのように、ほとんどのテキスト ビューアはこのバイト表現を通常の ASCII/Unicode 表現に変換します。いずれにせよ、難読化されたユーザー名/パスワードを保存することはセキュリティ上の危険であり、決して行うべきではありません。

ユーザー名/パスワードを安全に保存するには、プログラムにハードコーディングするのではなく、外部の安全なファイルからアクセスする必要があります。

于 2013-01-16T22:47:21.230 に答える
2

Dicarlo2 は次のように述べています。

ユーザー名/パスワードを安全に保存するには、プログラムにハードコーディングするのではなく、外部の安全なファイルからアクセスする必要があります。

これは、Java コードにハードコーディングするよりも優れていますが、文字列が文字列プールにインターンされていることを知っておく必要があるかもしれません。これもセキュリティ上の問題になる可能性があります。

Console.readPasswordこれが、が文字列ではなく文字配列を返す 理由です。http://docs.oracle.com/javase/tutorial/essential/io/cl.html

第 2 に、readPassword は String ではなく文字配列を返すため、パスワードが不要になるとすぐにパスワードを上書きしてメモリから削除できます。

しかし、実際のアプリケーションでは、パスワードは多くの場合文字列として使用されます

于 2013-01-16T23:03:42.413 に答える
1

パスワードは暗号化された値として保存する必要があります。パスワードで保護されたインスタンスへのすべてのアクセスでは、暗号化されたパスワードと、復号化アルゴリズムおよびもちろんキーが使用されます。そうすると、コンパイルされたファイルにパスワードが含まれなくなります。これを持っていることは非常に悪いです。

于 2013-01-16T22:49:20.313 に答える
0

パスワードなどが暗号化されていない限り、パスワードをハードコーディングしないでください。

コマンドラインでユーザーにパスワードの入力を求める場合は、SOに掲載されているこの方法を使用できます。Swing GUIの場合は、を使用しJPasswordFieldます。

お役に立てれば!!

于 2013-01-16T22:50:56.793 に答える