2012-01-27 2 views
1

Dans l'exemple ici http://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html#JDBCRealm le type de colonne user_pass est varchar(15), tandis que java.security.MessageDigest classe prend et renvoie byte[]. Quelle conversion faut-il appliquer au mot de passe 'abcd' (par exemple) pour le convertir en résumé MD5, attendu par Tomcat?Comment préparer des mots de passe digest pour Tomcat JDBCRealm?

PS.

J'ai essayé ce qui suit et cela fonctionne (coïncide avec le résultat de 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(); 
    } 

} 

Répondre

1

varchar(15) est certainement trop court pour digérer le mot de passe, mais il est généralement suffisant pour les mots de passe en clair. Augmentez simplement la taille.

J'ai utilisé le code suivant pour créer digérer les mots de passe:

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

(Base64 de Apache Commons Codec)

De plus, il y a un digest.bat/digest.sh dans Tomcat, vérifiez sur la page qui vous .

Questions connexes