IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

JAVA et mot de passe SHA (Hexa/Binaire)


Sujet :

Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut JAVA et mot de passe SHA (Hexa/Binaire)
    Bonjour,

    je vous expose mon petit (gros) souci :

    J'ai une base de données dans laquelle mes MDP utilisateur sont stockés en SHA. Ils sont générés en utilisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DigestUtils.shaHex(mdp.getBytes("utf-8"))
    qui vient de la librairie org.apache.commons.codec.digest.DigestUtils; (http://commons.apache.org/codec/apid...gestUtils.html)

    Jusque-là, rien de spécial. Le problème vient du fait que j'essaye de créer les utilisateur dans un LDAP et qu'il semble que ce ne soit pas le même SHA qui est utilisé.
    Pour faire simple pour le mot de passe testtest, j'ai 51abb9636078defbf888d8457a7c76f85c8f114c en base de données et il faudrait que j'indique au LDAP que le mot de passe est {SHA}Uau5Y2B43vv4iNhFenx2+FyPEUw=.

    J'ai trouvé des atrocités dans ce style http://www.openldap.org/faq/data/cache/347.html qui m'ont un peu permis d'y voir un peu plus clair mais au niveau résolution de mon côté je suis totalement paumé.

    J'ai testé la conversion de mon MDP en binaire puis l'encodage en Base64. Je n'arrive jamais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    public majMDP() {
        Base64.encodeBase64(this.hexPassToBinary().getBytes("utf-8"))
    }
     
    private String hexPassToBinary() {
             String[]hex={"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};  
             String[]binary={"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};  
     
             /*
             Scanner s=new Scanner(System.in);  
             System.out.print("Put hex value : ");  
             String userInput=s.next();  
             */
     
             String result="";  
             for(int i=0;i<this.MDP.length();i++)  
             {  
                 char temp=this.MDP.charAt(i);  
     
                 String temp2=""+temp+"";  
     
                 for(int j=0;j<hex.length;j++)  
                 {  
                     if(temp2.equalsIgnoreCase(hex[j]))  
                     {  
                         result=result+binary[j];  
                     }  
                 }  
             }
     
             return result;
         }
    Bon, et comme j'ai 40000 utilisateurs actifs, je me voit mal leur remettre tous leur mdp à 0 et changer tout le principe de stockage des mdp en BDD pour résoudre ça.

    Donc, si quelqu'un à un début d'idée ou de résolution pour ceci, ce serait super hyper über sympa.

    Merci beaucoup

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Résolution
    Bon, après le désespoir habituel j'ai fini par trouver quelque chose en passant par Postgres.

    Donc si ça intéresse quelqu'un :

    en BDD on a un sha Hex sous la forme :

    51abb9636078defbf888d8457a7c76f85c8f114c

    Pour le mot de passe : testtest

    Dans le LDAP il faut stocker : Uau5Y2B43vv4iNhFenx2+FyPEUw=

    A partir du MDP en clair il suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select encode(digest('testtest', 'sha1'), 'base64'); pour avoir le bon résultat

    Mais à partir de ce que l’on a en base on doit passer par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select encode((select E'\\x51abb9636078defbf888d8457a7c76f85c8f114c'::bytea), 'base64')

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Garthichow Voir le message
    A partir du MDP en clair il suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select encode(digest('testtest', 'sha1'), 'base64'); pour avoir le bon résultat
    Oui donc il suffit de d'abord calculer les octets du hash SHA-1, et ensuite il faut les encoder en Base64 au lieu d'en hexa.

    Pour faire ça avec la bibliothèque d'Apache, il suffit d'utiliser sha() au lieu de shaHex(), et d'utiliser Base64.encodeBase64String() pour en faire du base64.


    Citation Envoyé par Garthichow Voir le message
    Mais à partir de ce que l’on a en base on doit passer par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select encode((select E'\\x51abb9636078defbf888d8457a7c76f85c8f114c'::bytea), 'base64')
    Et en Java :
    - décoder l'hexa avec Hex.decodeHex(). (Pour obtenir le char[] il suffit d'appeler toCharArray() sur la String.)
    - encoder en Base64 avec le même Base64.encodeBase64String()
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Oui, c'est bon à savoir pour la suite à la limite

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/11/2008, 20h44
  2. Réponses: 1
    Dernier message: 30/07/2008, 23h44
  3. [ORACLE] Gestion mot de passe sous java
    Par jbmen dans le forum JDBC
    Réponses: 7
    Dernier message: 09/07/2008, 22h50
  4. JAVA mot de passe
    Par ulysse031 dans le forum AWT/Swing
    Réponses: 27
    Dernier message: 27/03/2007, 16h20
  5. Appli Java et mot de passe "en clair"
    Par baffer dans le forum JDBC
    Réponses: 1
    Dernier message: 18/02/2007, 19h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo