0

2 つの質問があります 1 次のコードがありますが、コードの別の部分から使用する方法がわかりません。つまり、ユーザーが文字列パスワードを暗号化するために登録するときです。

public static final String md5(final String toEncrypt) { 
    try { 
        final MessageDigest digest = MessageDigest.getInstance("md5");               
        digest.update(toEncrypt.getBytes()); 
        final byte[] bytes = digest.digest();       

        final StringBuilder sb = new StringBuilder(); 

        for (int i = 0; i < bytes.length; i++) { 
            sb.append(String.format("%02X", bytes[i])); 
        } 

        return sb.toString().toLowerCase();
    } 
    catch (Exception exc) { return ""; // Impossibru! }
}

2 番目の質問は、ユーザーが編集ボックスに入力した内容と一致するようにデータベースから文字列を取得するときに、その文字列をどのように復号化するかです。

4

2 に答える 2

8
  1. MD5を「復号化」することは想定されていません。ハッシュ関数の要点は、ハッシュを解除するのを非常に困難にすることです。(もちろん、ハッカーは試行して成功することもありますが、それは別のトピックです。)ユーザーの入力をハッシュ化し、それをデータベース内のハッシュ化されたパスワードと比較します。
  2. それを呼び出すには、単に使用しますString hashedPassword = md5("some person's password");。通常の方法と同じように。
  3. 例外を無視するのではなく、実際に何らかの例外処理を行う必要があります。少なくとも、最低でもログに記録してください。または return null、またはthrows句を使用します。それらを完全に無視しないでください。
  4. 3行目で何が起こっているのかさえわかりません...おそらくそれらの別の行を作成する必要があります. また、あなたのインデントは少し非常に奇妙です。コードを書くよりもコードを読むことに多くの時間を費やすことになるので、今すぐ読めるようにしておけば、後で過去の自分に感謝するでしょう。実際、私はすでにバグを見ています:

    catch (Exception exc) { return ""; // Impossibru! }
    

    閉じ括弧はコメントアウトされています。

于 2013-10-08T21:06:28.097 に答える
1

md5 は一方向の暗号化方式です。暗号化されたバージョンを見つける唯一の方法は、結果が一致するまで文字の組み合わせを md5 ハッシュすることです

于 2013-10-08T21:06:36.913 に答える