1

在此处的示例http://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html#JDBCRealm列的类型user_passvarchar(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));

Base64来自Apache Commons 编解码器

此外,Tomcat中有一个digest.bat/ digest.sh,请在您链接的页面上检查它。

于 2012-01-27T12:05:04.477 回答