1

ここの例ではhttp://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html#JDBCRealmuser_pass列のタイプはですがvarchar(15)java.security.MessageDigestクラスは を取り、返しますbyte[]'abcd'Tomcatが期待するMD5ダイジェストに変換するには、パスワードにどの変換を適用する必要がありますか?

PS。

私は以下を試しましたが、うまくいきます(digest.batの結果と一致します)。唯一の問題は長さです。ダイジェストは 15 文字よりも長くなります。テーブルだけ変えることはできますか?

public class DigestRunner {

    /**
     * @param args
     * @throws NoSuchAlgorithmException 
     */
    public static void main(String[] args) throws NoSuchAlgorithmException {
        String password = "abcd";
        MessageDigest dig = MessageDigest.getInstance("MD5");

        System.out.println(toString(dig.digest(password.getBytes())));

    }


    public static String toString(byte[] ba)
    {
        StringBuilder hex = new StringBuilder(ba.length * 2);

        for(byte b : ba)
            hex.append(String.format("%02x", b));

        return hex.toString();
    }

}
4

1 に答える 1

1

varchar(15)ダイジェスト パスワードには明らかに短すぎますが、通常は平文パスワードには十分です。サイズを大きくするだけです。

ダイジェスト パスワードを作成するために、次のコードを使用しました。

final MessageDigest messageDigest = java.security.MessageDigest.
        getInstance("SHA-256");
final byte bin[] = messageDigest.digest(("admin").getBytes());
System.out.println(Base64.encodeBase64String(bin));

( Apache Commons CodecBase64から)

なお、Tomcat にはdigest.bat/digest.shがありますので、リンク先のページで確認してください。

于 2012-01-27T12:05:04.477 に答える