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

Sécurité Java Discussion :

Crypter les mots de passe utilisateurs


Sujet :

Sécurité Java

  1. #21
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Finalement je pense avoir trouvé le bon algo car j'obtiens des chaines de caractères en hexadécimal qui font de 62 à 64 caractères je met le code ici qui pourrais servir à d'autres égarés comme moi

    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
    34
    35
     
            public void userRegistration(userSubscription user)
    	{
    		MessageDigest md;
    		String algorithm="SHA-256";
    		byte[] hash;
     
    		Date date = new Date(System.currentTimeMillis());
    		java.sql.Date sqlDate = new java.sql.Date(date.getTime());
    		Timestamp time = new Timestamp(sqlDate.getTime());
     
    		//Password encryption
    		try 
    		{
    			md=MessageDigest.getInstance(algorithm);
    			hash=md.digest(user.getPassword().getBytes("UTF-8"));
    			StringBuilder sb = new StringBuilder(hash.length*2);
    			for (byte b : hash) {
    				sb.append( String.format("%x", b) );
    			}
    			user.setPassword(sb.toString());
    		} 
    		catch (NoSuchAlgorithmException e) 
    		{
    			System.out.println("L'algo n'existe pas !!");
    			e.printStackTrace();
    		}
    		catch (UnsupportedEncodingException e) 
    		{
    			System.out.println("L'encodage n'est pas bon");
    			e.printStackTrace();
    		}
    		//userDao.insertUserAccess(user,time);
    		//userDao.insertUserInformations(user);
    	}

  2. #22
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    non, tu obtiens un array de byte (byte[]) de la longeur correspondant à l'algorithme de hash choisie (dans ton cas 256 bits, soit 32 bytes). A toi maintenant de convertir ce byte[] en String. Tu peux par exemple utiliser sa représentation hexadécimale

    Version bourrin qui devrais marcher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    hash=md.digest(user.getPassword().getBytes("UTF-8"));
    StringBuilder result = new StringBuilder();
    for (byte b : hash){
       result.append(String.format("%2x",b);
    }
    edit: le "2" a de l'importance, il force le byte à prendre 2 caractères

  3. #23
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Ca change bien quelquechose j'ai toujours un password crypté de 64 caractères cette fois ci cool merci du conseil voilà je redonne l'algo au cas où ça intéresserait quelqu'un

    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
    34
    35
    36
     
    	public void userRegistration(userSubscription user)
    	{
    		MessageDigest md;
    		String algorithm="SHA-256";
    		byte[] hash;
    		String password="";
     
    		Date date = new Date(System.currentTimeMillis());
    		java.sql.Date sqlDate = new java.sql.Date(date.getTime());
    		Timestamp time = new Timestamp(sqlDate.getTime());
     
    		//Password encryption
    		try 
    		{
    			md=MessageDigest.getInstance(algorithm);
    			hash=md.digest(user.getPassword().getBytes("UTF-8"));
    			StringBuilder sb = new StringBuilder(hash.length*2);
    			for (byte b : hash) {
    				sb.append( String.format("%2x", b) );
    			}
    			password = sb.toString();
    		} 
    		catch (NoSuchAlgorithmException e) 
    		{
    			System.out.println("L'algo n'existe pas !!");
    			e.printStackTrace();
    		}
    		catch (UnsupportedEncodingException e) 
    		{
    			System.out.println("L'encodage n'est pas bon");
    			e.printStackTrace();
    		}
    		userDao.insertUserAccess(user,time,password);
    		userDao.insertUserInformations(user);
    	}

  4. #24
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Par défaut
    Le problème de sauvegarde d'un hash du password c'est que si jamais l'utilisateur perd son mot de passe il ne poura plus se reconnecté et on n'a pas de moyen de le lui renvoyer..

  5. #25
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    en général pour ce cas là, on utilise une procédure de nouveau mot de passe (envoi d'un token et tout le bazard).

    Si le mot de passe doit être décryptable, alors il n'y a plus aucun intérêt à le crypter dans la DB.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. crypter le mot de passe Utilisateur
    Par ibrahima lamine dans le forum VB.NET
    Réponses: 6
    Dernier message: 06/03/2011, 17h37
  2. [1.x] Crypter les mot de passe avant sauvegarde
    Par Computib dans le forum Symfony
    Réponses: 6
    Dernier message: 13/07/2010, 13h04
  3. Reinitialiser les mots de passe utilisateur d'une OU
    Par alex_m94 dans le forum Windows Serveur
    Réponses: 10
    Dernier message: 28/09/2008, 21h36
  4. Comment crypter les mots de passe avec MD5 ?
    Par Fngonka dans le forum ASP.NET
    Réponses: 19
    Dernier message: 31/07/2008, 09h48
  5. comment crypter les mots de passe?
    Par JauB dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/11/2005, 16h37

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