Question

En exemple ici http://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html#JDBCRealm le type de user_pass la colonne est varchar(15), alors que java.security.MessageDigest les cours prennent et reviennent byte[].Quelle conversion faut-il appliquer au mot de passe 'abcd' (par exemple) pour le convertir en résumé MD5, attendu par Tomcat ?

PS.

J'ai essayé ce qui suit et cela fonctionne (coïncide avec le résultat digest.bat).La seule question est la longueur maintenant :le résumé est plus long que 15 caractères.Puis-je simplement changer la table ?

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

}
Était-ce utile?

La solution

varchar(15) est définitivement trop court pour un mot de passe résumé, mais il est généralement suffisant pour les mots de passe en texte brut.Augmentez simplement la taille.

J'ai utilisé le code suivant pour créer des mots de passe digest :

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

(Base64 depuis Codec Apache Commons)

De plus, il existe un digest.bat/digest.sh dans Tomcat, vérifiez-le sur la page que vous avez liée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top