2012-01-27 44 views
1

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

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

} 

回答

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

Base64Apache Commons Codec

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