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

Servlets/JSP Java Discussion :

Sécuriser un LOGIN par SHA-1


Sujet :

Servlets/JSP Java

  1. #1
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut Sécuriser un LOGIN par SHA-1
    j'ai un servlet qui gère la connexion à un formulaire afin de pouvoir le modifier, les mots de passe sont chiffrés en SHA-1, alors quand je veux me connecter avec mon mot de passe toujours il me renvoi le message que j'ai préparé en cas de faute de mot de passe, voici le code du login

    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
     
    @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            try {
                //HttpSession session = request.getSession();
                bac = request.getParameter("logBac");    //je reçois ici le numéro de bac qui est l'utilisateur 
                pwd = request.getParameter("logPass");  //là je reçois le mot de passe entré
                String encryptPass = encrypt(pwd).toString(); // je chiffre mon mot de passe par la même fonction de chiffrement lors d'inscription
     
                String query = "SELECT * FROM compte WHERE bac=? AND password=?";
                System.out.println(query);
                try {
                    stat = cnx.prepareStatement(query);
                    stat.setString(1, bac);               //j'envoi le user à la requête
                    stat.setString(2, encryptPass);    //j'envoi le mot de passe chiffré afin qu'il le compare
     
    rslt = stat.executeQuery();
                    if(rslt.next()){
                        //j'envoi les données à mes objets ce code fonctionne bien si je teste sans chiffrement des mots de passe
                        c.setNum_compte(rslt.getInt("num_compte")); 
                        c.setBac(rslt.getString("bac"));
                        e.setBac(rslt.getString("bac"));
                        c.setPassword(rslt.getString("password"));
     
                        Etudiant();
                        Fils();
                        Parents();
     
                        request.getSession().setAttribute("compte", c);
                        request.getSession().setAttribute("bachelier", e);
                        request.getSession().setAttribute("pere", pere);
                        request.getSession().setAttribute("mere", mere);
                        RequestDispatcher disp = request.getRequestDispatcher("edition.jsp");
                        disp.forward(request, response);
                    }else{
                        processRequest(request, response);
                    }
                } catch (SQLException ex) {
                    Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
                }
            } catch (Exception ex) {
                Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            }   
        }
    voici la méthode de chiffrement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static byte[] encrypt(String x) throws Exception {
            java.security.MessageDigest d = null;
            d = java.security.MessageDigest.getInstance("SHA-1");
            d.reset();
            d.update(x.getBytes());
            return d.digest();
        }

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Désolé je n'ai pas compris la question ?

    Petite remarque, je pinaille, mais SHA-1 n'est pas recommandé pour les mots de passe. On trouve facilement des tables de mots de passes sur Internet.

    https://paragonie.com/blog/2016/02/h...ssword-in-2016

    https://crackstation.net/hashing-security.htm

  3. #3
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    C'est la manière dont tu transformes le tableau d'octets resultant de la méthode encrypt qui n'est pas bonne.
    Si tu utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    encrypt(pwd).toString()
    , tu obtiens une représentation en String de ton objet tableau de byte, c'est à dire son adresse mémoire Donc pas la même chose à l'enregistrement et par la suite ...

    Remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    encrypt(pwd).toString()
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new String(encrypt(pwd))

  4. #4
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    Citation Envoyé par fr1man Voir le message
    Désolé je n'ai pas compris la question ?

    Petite remarque, je pinaille, mais SHA-1 n'est pas recommandé pour les mots de passe. On trouve facilement des tables de mots de passes sur Internet.

    https://paragonie.com/blog/2016/02/h...ssword-in-2016

    https://crackstation.net/hashing-security.htm
    merci fr1man pour l'information mais c'est pas pour du réel c'est pour mon projet de fin d'étude et j'avais SHA-1 comme cours en cryptographie.

  5. #5
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    Citation Envoyé par chtig Voir le message
    C'est la manière dont tu transformes le tableau d'octets resultant de la méthode encrypt qui n'est pas bonne.
    Si tu utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    encrypt(pwd).toString()
    , tu obtiens une représentation en String de ton objet tableau de byte, c'est à dire son adresse mémoire Donc pas la même chose à l'enregistrement et par la suite ...

    Remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    encrypt(pwd).toString()
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new String(encrypt(pwd))
    effectivement ça a bien fonctionné, merci

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

Discussions similaires

  1. [AXIS2] Sécuriser mon webservice par login/mdp
    Par ericw78 dans le forum Services Web
    Réponses: 0
    Dernier message: 20/12/2008, 17h47
  2. Réponses: 9
    Dernier message: 10/07/2008, 10h33
  3. sécuriser un formulaire par une équation
    Par aboura86 dans le forum Langage
    Réponses: 8
    Dernier message: 03/07/2008, 18h03
  4. Réponses: 1
    Dernier message: 03/01/2006, 11h07

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