Как подготовить дайджест паролей для Tomcat JDBCRealm? - PullRequest
1 голос
/ 27 января 2012

В этом примере 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();
    }

}

1 Ответ

1 голос
/ 27 января 2012

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, проверьте его на странице, на которую вы ссылались.

...