1

文字列リストからMD5メッセージダイジェストに2つの文字列を変換しようとしています。

私の文字列リストは「usernamepassword」と呼ばれます。

try {
            MessageDigest mdg = MessageDigest.getInstance("MD5");      

            mdg.update(usernamepassword.get(0).getBytes(), 0, usernamepassword.get(0).length());
            mdg.update(usernamepassword.get(1).getBytes(), 1, usernamepassword.get(0).length());     


        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(UPCheck.class.getName()).log(Level.SEVERE, null, ex);
        }

私の質問は-

A:それは正しいやり方ですか?B:別のクラスで個々のMD5ハッシュを使用できるようにするには、どうすればそれを返すことができますか?

4

2 に答える 2

5

A: それは正しいやり方ですか?

いいえ、次の 4 つの理由からです。

1) 特定のエンコーディングを指定する代わりに、デフォルトの文字エンコーディングを使用しています。UTF-8 を使用することをお勧めします。

2)現在、使用するバイト数を指定するために文字列の長さを使用しています

3) 個別のダイジェスト (文字列ごとに 1 つ) が必要なMessageDigest場合は、それぞれに個別のインスタンスを使用する、呼び出しresetの間に呼び出す必要があります

4) 現時点では、ダイジェストに対して実際には何もしていません。

「特定のエンコーディングの文字列の MD5」を別のメソッドに抽出することをお勧めします。

public static byte[] getMd5OfUtf8(String text) {
    try {
        MessageDigest digest = MessageDigest.getInstance("MD5");      
        return digest.digest(text.getBytes("UTF-8"));
    } catch (NoSuchAlgorithmException ex) {
        throw new RuntimeException("No MD5 implementation? Really?");
    } catch (UnsupportedEncodingException ex) {
        throw new RuntimeException("No UTF-8 encoding? Really?");
    }
}

次に、関心のあるリスト要素ごとにそれを呼び出すことができます-後でダイジェストを使用して何をしようとしているのかは明確ではありません、おそらくそれらを個別に必要とします...

編集: コメントで述べたように、MD5 は最近ではハッシュの選択肢として最適ではありません。ソルトを使用した SHA-256 のようなものの方が良いでしょうが、実際に安全なアプリケーションについては、このトピックに関する最新の文献を読む必要があります。(私は専門家ではないので、あまり権威のある発言はしたくありません。)

于 2013-03-10T20:10:09.580 に答える
1

DigestUtilsApache Commonsのクラスを使用します。いくつかのユーティリティ メソッドは、md5 またはその他の一般的なハッシュ関数を計算/表示するのに役立ちます。

于 2013-03-10T20:16:38.470 に答える