在此示例http://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html#JDBCRealm中,user_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();
}
}
答案 0 :(得分: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 Codec的Base64
)
此外,Tomcat中有digest.bat
/ digest.sh
,请在您关联的页面上进行检查。