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 un mot de passe


Sujet :

Sécurité Java

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 63
    Par défaut Crypter un mot de passe
    Bonjour,

    Comment je peux crypter un mot de passe qui est stocké dans un variable "String" avant de l'envoyer sur le réseau?

    J'espère que vous pouvez m'aider,
    Et merci d'avance.

  2. #2
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Peut être que ça t'aideras : java2s

  3. #3
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Le 10ème post de ce topic contient une classe plus récente prenant en charge MD5 et SHA1.

    Donc pour répondre à ta question, soit tu hashes ta chaine, sauf que cela implique d'avoir nécessairement le hash de l'autre côté de ta connexion pour faire la comparaison, soit tu chiffres la connexion (SSL).

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 63
    Par défaut
    Merci pour vous mais vous avez très compliqué le problème.
    En fait ce n'est qu'un chiffrement d'une chaine de caractère.

  5. #5
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Merci pour vous mais vous avez très compliqué le problème.

    fais comme tu le sens

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 21
    Par défaut
    Pour chiffrer chiffrer un mot de passe à destination d'un réseau de manière réellement sécurisé, il faut:

    Coté serveur généré une pair clé public/clé privé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SecureRandom sr = new SecureRandom();
    KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
    keyGen.initialize(keysize, sr);
     
    KeyPair keypair = keyGen.generateKeyPair();
    PrivateKey privateKey = keypair.getPrivate();
    PublicKey publicKey = keypair.getPublic();
    Transmettre la clé public au client:

    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
     
    //Coté serveur:
    //récupère le tableau d'octets de la clé public
    byte[] key = publicKey.getEncoded();
     
    //envoyer le tableau d'octet 
    ...
     
    //Coté client
    //récupère le tableau d'octets de la clé public à partir du réseau
    byte[] key = ...
     
    //Construit l'instance de la clé public
    X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(key);
    KeyFactory keyFactory = KeyFactory.getInstance("RSA");
    PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);
    Coté client, chiffrer le mot de passe avec la clé public:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.ENCRYPT_MODE, publicKey);
    byte[] cryptedPassword = cipher.doFinal("monmotdepasse".getBytes());
     
    //Transmettre cryptedPassword via le réseau
    ...
    Sur le serveur, déchiffrer avec la clé privé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //Récupérer sur le réseau le mot chiffré
    byte[] cryptedPassword = ...
     
    //déchiffrer
    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.DECRYPT_MODE, privateKey);
    byte[] uncryptedPassword = cipher.doFinal(cryptedPassword);
    String motdepasse = new String(uncryptedPassword);

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par ajmaster Voir le message
    Pour chiffrer chiffrer un mot de passe à destination d'un réseau de manière réellement sécurisé, il faut:

    Coté serveur généré une pair clé public/clé privé:
    Transmettre la clé public au client:
    Coté client, chiffrer le mot de passe avec la clé public:
    Sur le serveur, déchiffrer avec la clé privé:
    Et si t'as un serveur intermédiare rogue qui s'installe entre les deux cette technique sert à rien (tu recevra coté client la clé publique du serveur rogue qui aura tout le loisir de décrypter le mot de passe pour le réencrypter à destination du vrai serveur)

    La manière simple la plus sure reste de mettre en place une connection ssl ou tls, tout sera crypté dedans et ce protocole a subit suffisament de crypto analyse que pour etre considéré a l'heure actuelle comme fiable (à condition de bien l'utiliser ). Si tu veux passer par d'autre méthodes, faut commencer par des cours de cryptographie car utiliser les algorithme n'importe comment n'apporte aucune sécurité

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 21
    Par défaut
    Tu a tout a fait raison, j'ai voulu faire simple dans mon exemple, mais effectivement une architecture PKI est indispensable pour garantir que l'auteur et le destinataire sont bien ceux attendu.

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 63
    Par défaut
    Est ce que c'est possible la méthodes de ajmaster avec l'utilisation des certificat X509 ou c'est le mm pb.
    Si c'est le mm pb s'il vous plait donnez moi un code java (exemple) qui permet d'exploiter la solution de tchize, car je n'ai aucune idée sur l'utilisation du protocole ssl ou tls avec du java.

    Merci d'avance.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    les certificats X509 servent principalement aux protocoles ssl et tls. Pour utiliser du ssl/tlc, il suffit d'utiliser le SSLSocket

  11. #11
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 63
    Par défaut
    S'il vous plait tchize, je serai très reconnaissante si vous pouvez m'aider, et me donner un exemple car je suis un peu pressée par le temps, et vraiment bloquée et j'ai perdu beaucoup de temps dans ce problème.

    Merci d'avance.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482

  13. #13
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 63
    Par défaut
    Merci beaucoup tchize_, mais j'ai pas pu résolu mon pb.
    Donc, voila j'explique encore:
    Mon réseau=(client+certificat) et (serveur+certificat)
    Le client se connecte au serveur par un numero de port et un nomserver
    les deux entités ont échangé leurs certificats
    aussi le serveur possede une base de données dans laquelle stocker les informations de ses clients.
    Pour que le client peut obtenir un service à partir du client il faut envoyer son loginet son password.
    Donc mes pbs sont:
    1. mot de passe doit être chiffrer dans la base de données du serveur
    2. Le client doit chiffrer le mot de passe avant de l'envoyer sur le réseau

    Donc je sais qu'il faut pas obtenir des solutions sur des plateaux d'argents mais je suis vraiment obliger de demander de l'aide . Donc si qq'1 de vous a une solution avec du java je serai très reconnaissante.
    Merci encore

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    a priori, sauf si tu veux l'utiliser pour l'authentification, t'as pas besoin de certificat coté client. Et si tu utilise un certificat client, le mot de passe deviens inutile.

    pour chiffre le mot de passe dans la base de donnée serveur, on utilise généralement un hashage genre md5

  15. #15
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 63
    Par défaut
    pour chiffre le mot de passe dans la base de donnée serveur, on utilise généralement un hashage genre md5
    c'est bon c'est une solution simple et compréhensible.
    Et à propos le principe:
    J'ai fait une authentification mutuelle par certificats entre le client et le serveur pour valider la connexion et puis pour accéder aux services du serveur j'utilise l'authentification par mot de passe et pour que le serveur connait le client.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    a partir du moment ou le client a un certificat, le serveur sais qui il est via ce certificat, le login/mot de passe deviens inutile. Note qu'en ssl l'utilsation d'un certificat coté client est assez rare, par rapport à l'utilisation du ssl en lui même. Seul le certificat serveur est indispensable. Fournir des certificat clients, en plus, c'est ajouter beaucoup de boulot de maintenance pour les générer pour chaque client

  17. #17
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    a partir du moment ou le client a un certificat, le serveur sais qui il est via ce certificat, le login/mot de passe deviens inutile. Note qu'en ssl l'utilsation d'un certificat coté client est assez rare, par rapport à l'utilisation du ssl en lui même. Seul le certificat serveur est indispensable. Fournir des certificat clients, en plus, c'est ajouter beaucoup de boulot de maintenance pour les générer pour chaque client
    En fait tout dépend des contraintes. Dans certains cas on ne veut autoriser la connexion au server qu'à certains clients qui sont autorisés par une identité bien établie. Dans ce cas, le certificat client est bien plus sûr qu'un login/mdp, et l'accès au site en soit est impossible à qui n'a pas un certificat accepté par le server (il ne verra pas une seule page -> pas d'attaque par injection SQL ou autre possible). Bien sûr ça devient plus lourd à gérer la PKI derrière et faut le faire très rigoureusement sinon ça peut faire très mal
    Certaines banques commencent à utiliser ce principe : il est indispensable pour le client d'être sûr qu'il parle bien avec le server de sa banque (ça se fait toujours avec SSL de vérifier que le server est le bon), mais la banque a aussi surement envie d'être sûre que le client qui se connecte est aussi u vrai client... Là le certificat client est bien pratique

Discussions similaires

  1. [Sécurité] Crypter un mot de passe UNIX avec PHP
    Par dom78 dans le forum Langage
    Réponses: 3
    Dernier message: 15/05/2006, 19h28
  2. [Sécurité] Crypter un mot de passe
    Par julien.63 dans le forum Langage
    Réponses: 8
    Dernier message: 25/04/2006, 17h24
  3. Crypter un mot de passe
    Par Rupella dans le forum MFC
    Réponses: 6
    Dernier message: 30/03/2006, 09h23
  4. Crypter un mot de passe
    Par Badaboumpanpan dans le forum Modules
    Réponses: 1
    Dernier message: 30/01/2006, 10h23
  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