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 :

Cryptage mot de passe Connection


Sujet :

Sécurité Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de srvremi
    Homme Profil pro
    Directeur d'école d'ingénieurs
    Inscrit en
    Mars 2002
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur d'école d'ingénieurs
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 554
    Par défaut Cryptage mot de passe Connection
    Bonjour.

    Voilà ma question : j'ai une application qui crée un objet Connection pour se connecter à une base de données mutualisée. Cette BD utilise un login et un mot de passe fixes.

    Seulement voilà, les utilisateurs finaux ne connaissent pas ce mot de passe, et je ne veux pas qu'ils le connaissent.

    Est-il possible de trouver un moyen pour le "crypter" pour qu'il ne puissent pas le lire en décompilant les binaires générés ?

    Merci d'avance.
    @+ Rémi

  2. #2
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Tes identifiants de connexion (login/password) se trouvent où : fichier de config XML d'une API de persistance ? constante Java ? fichier de propriété quelconque ?

  3. #3
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    Voilà ce que tu peux faire pour encrypter :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    import java.io.*;
    public class Encryptor
    {
        public Encryptor(int aKey)
        {
           key = aKey;
        }
     
        public void encryptFile(String inputFileName, String outputFileName) throws IOException
        {       
            InputStream in = null;
            OutputStream out = null;
            try
               {
                  in = new FileInputStream(inputFileName);
                  out = new FileOutputStream(outputFileName);
                  encryptStream(in,out);
     
               }
           finally
               {
                 if(in != null)
                    in.close();
                 if(out != null)       
                    out.close();      
               }
        }
     
        public void encryptStream(InputStream in, OutputStream out) throws IOException
        {
            boolean done = false;
            while(!done)
               {
                    int next = in.read();
                    if(next == -1)
                       done = true;
                   else
                   {
                      byte b = (byte)next;
                      byte c = encrypt(b);
                      out.write(c);
                   }
               }
        }
     
        public byte encrypt(byte b)
        {
             return (byte)(b + key);
        }    
     
        private int key;
    }
    Ca encrypte tout et n'importe quoi...

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par Razgriz
    Ca encrypte tout et n'importe quoi...
    et ça ce casse ... en 3s

    Je ne suis pas sûr qu'un simple cryptage de césar soit la solution , regarde plutôt du coté du package javax.crypto
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  5. #5
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Si jamais t'as DB est une Oracle (récente + entreprise), alors regarde du côté du "cryptage transparent" : http://leoanderson.developpez.com/se...oracle/#LV-B-2


    ...sinon tu peux "obfuscer" ton code si tes login/password sont en constantes Java ; dans les autres cas c'est les droits sur le fichier de config. (XML, properties) qui doivent être définis au minimum vital pour tout autre utilisateur que celui de l'application.

    NB_ la crypto en Java se fait avec des <<JCE providers>> du type (SunJCE fourni par défaut ou Bouncy Castle en open-source) avec des algos 'standards' comme AES et RSA mais voir comment la base gère ses fonctions de déchiffrement car toutes n'en ont pas !

  6. #6
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    ouias ça se casse facilement mais c'est la base, c'est le premier encrypteur créé...

  7. #7
    Membre chevronné Avatar de srvremi
    Homme Profil pro
    Directeur d'école d'ingénieurs
    Inscrit en
    Mars 2002
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur d'école d'ingénieurs
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 554
    Par défaut
    Merci pour vos députs de réponse.

    C'est stocké dans un fichier de config (hibernate.cfg.xml).
    Le truc javax.crypto, vous avez de la doc ?

    @+
    Rémi

  8. #8
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    un lien que doit connaître tout developpeur Java : Javadoc
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  9. #9
    Membre chevronné Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Par défaut
    utilise le hachage MD5. Y a pas mieux!

    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
     
    import java.security.*;
     
     
     // GESTION MOT DE PASSE
     // Role: Prend en entree une chaine de caracteres et produit une nouvelle chaine cryptee.
     // Utilisation du hachage MD5 qui est un cryptage unidirectionnel.
     private String cryptPassword(String pass) {
      byte[] uniqueKey = pass.getBytes();
      byte[] hash = null;
      try {
       hash = MessageDigest.getInstance("MD5").digest(uniqueKey);
      }
      catch (Exception e) { // Il ne doit jamais avoir d'erreurs ici
       e.printStackTrace();
      }
      StringBuffer hashString = new StringBuffer();
      for (int i=0; i<hash.length; ++i ) {
       String hex = Integer.toHexString(hash[i]);
       if (hex.length() == 1) { 
        hashString.append('0');
        hashString.append(hex.charAt(hex.length()-1));
       }
       else {
        hashString.append(hex.substring(hex.length()-2));
       }
      }
      return hashString.toString();
     }

  10. #10
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    C'est pareil, un MD5 c'est vite cracké avec John The Ripper...

  11. #11
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Citation Envoyé par billynirvana
    utilise le hachage MD5. Y a pas mieux!


    Il existe des cryptanalyses (failles de sécurité) sur la fonction de hachage MD5 : utiliser plutôt SHA-1, voire SHA-256...

    Sinon de toute façon il faut au moins qu'il chiffre son mot de passe avec une clé GARDEE SECRETE DANS LE CODE APPLICATIF pour que le moteur de la base déchiffre le tout ; sinon les utilisateurs pourront rejouer son mot de passe haché comme il le veulent sans même savoir que c'est un condensé cryptographique.

    Bref le seul vrai moyen fiable et simple à mon sens est de n'accorder aucun droit aux utilisateurs sur le fichier "hibernate.cfg.xml" !!!

  12. #12
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    Je finis mes exams et je poste dans les pages libres un encrypteur de chaque type, César, AES et DSA, les deux derniers étant théoriquement incassables...

Discussions similaires

  1. Cryptage mot de passe
    Par Général03 dans le forum BSD
    Réponses: 20
    Dernier message: 15/02/2010, 08h42
  2. Cryptage mot de passe dans SQL Server 2000
    Par TheReturnOfMuton dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/02/2009, 22h43
  3. [cryptage] mot de passe en MD5
    Par afrodje dans le forum VB.NET
    Réponses: 17
    Dernier message: 11/02/2008, 15h29
  4. [Sécurité] Cryptage mot de passe
    Par elitemedia dans le forum Langage
    Réponses: 5
    Dernier message: 12/09/2006, 21h51
  5. cryptage mots de passe lors de la saisie
    Par ycef dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 14/09/2004, 13h22

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