0

パスワードを比較する場合、パスワードをメモリに保持するという問題が常に発生します。代わりに、パスワードが導入された瞬間に、それを md5 スナップショット (またはその他のハッシュ生成関数) に置き換えたいと思います。

キーと値のペアがあると仮定すると、String password = "Secret";「秘密」を一意のものにスクランブルする最も簡単な方法は何ですか?

4

3 に答える 3

5

でパスワードを取得するとすぐに、パスワードStringをゼロにすることができないため、すでに失敗しています。別のオブジェクトが偶然に上書きするまで、ヒープに残ります。最初に確認する必要があるのは、パスワードのみを保持char[]し、できるだけ早く手動でゼロにすることです。ハッシュに関しては、JDK にはそれらのサポートが付属しています。チェックアウトしてくださいjava.security.MessageDigest

于 2012-07-12T16:55:56.667 に答える
2

MessageDigest を使用します。このようなもの:

MessageDigest algorithm = MessageDigest.getInstance("MD5");
algorithm.reset();
algorithm.update(password.getBytes());
byte bytes[] = algorithm.digest();
StringBuffer sb = new StringBuffer();
for (byte b : bytes) {
    String hex = Integer.toHexString(0xff & b);
    if(hex.length() == 1)
        sb.append('0');
    sb.append(hex);
}
result = sb.toString();

また、MD5 アルゴリズムが何らかの形で利用できない場合に getInstance メソッドによってスローされる NoSuchAlgorithmException にも注意してください。

于 2012-07-12T17:01:56.037 に答える
0

Messagedigestクラスを使用してハッシュを生成できます

しかし、重要なのは、パスワード全体をメモリに取得しないことだと思います-ある種のバイトストリームを介してパスワードを読み取っている場合は、メッセージダイジェストクラスの更新メソッドを使用して、メッセージダイジェストに直接読み取ってください。結果を取得するには、コールダイジェストの読み取りを終了します。

于 2012-07-12T16:57:04.640 に答える