0

Web サービスからの Java のパスワードを比較しようとしています。

次のようにコマンドラインからサービスを呼び出します。

curl -d '[{"usr":"joe","password":"joe"}]' http://mydomain.com:8080/myservice/login

JSON を解析し、パスワードをハッシュ メソッドに渡します。

私のハッシュ方法は次のとおりです。

 private String createHash(String password){

    byte[] bytesOfMessage = null;
    try {
        bytesOfMessage = password.getBytes("UTF-8");
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    MessageDigest md = null;
    try {
        md = MessageDigest.getInstance("MD5");

    } catch (NoSuchAlgorithmException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    String thedigest = md.digest(bytesOfMessage).toString();
    System.out.println("passed in: "+thedigest);

    return thedigest;
}

問題は、まったく同じパスワードでこのメソッドを呼び出すたびに、出力されるハッシュが異なることです。パスワードを比較してユーザーを認証できるように、パスワードを同じハッシュで出力するにはどうすればよいですか?

ありがとう!

4

2 に答える 2

3

digest()メソッドは を返し、onbyte[]toString()メソッドはcontentではなく、バイト配列のオブジェクト IDbyte[]を出力しています。一般に、byte[] の結果を出力するには、バイトを出力可能な文字列に変換する必要があります (多くの場合、16 進エンコーディングまたは base64 エンコーディングを使用します)。md5 チェックサムには 16 進数エンコーディングがよく使用されます

于 2012-09-04T18:03:12.590 に答える
0

base64で試すことができます。例を示しました

public String encrypt(String plaintext) throws Exception {

        MessageDigest messageDigest = null;
        String hash=null;

        try{
            messageDigest = MessageDigest.getInstance("MD5");
            messageDigest.update(plaintext.getBytes("UTF8"));
            byte[] raw = messageDigest.digest();
            hash = new String(Base64.encode(raw));


        }catch(Exception nsa){
        throw new Exception();
        }

            return hash;

}
于 2012-09-04T18:45:14.093 に答える