在这里的例子 http://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html#JDBCRealm 的类型 user_pass 列是 varchar(15), ,而 java.security.MessageDigest 类需要和返回 byte[].哪个转换应该适用于密码 'abcd' (例如)将其转换为Md5摘要,Tomcat所期望的?

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();
    }

}
有帮助吗?

解决方案

varchar(15) 对于摘要密码来说绝对太短,但对于明文密码来说通常已经足够了。只需增加尺寸。

我已使用以下代码创建摘要密码:

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

(Base64Apache Commons编解码器)

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top