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

R�seau C Discussion :

Crypter une chaine de caract�res


Sujet :

R�seau C

  1. #1
    Membre tr�s actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Par d�faut [RESOLU]Crypter une chaine de caract�res
    Bonjour,

    Dans le cadre d'un programme je dois enregistrer le mot de passe de l'utilisateur dans un fichier sur le disque dur. Pour l'instant je l'�cris dans un fichier ".passwd" de telle sorte � ce qu'il ne soit pas visible avec une simple "ls". Seulement un "ls -a" l'affiche. Ensuite on peut faire un "cat .passwd" pour voir afficher le mot de passe. Je voudrais donc int�grer un syst�me qui crypte le mot de passe avant de l'inscrire dans le fichier.

    Et puis � un autre niveau, mais toujours pour le meme probl�me, serait-il possible de d�velopper un algorithme de cryptage qui renderait le mot de passe ind�criptable ? Il faudrait alors recrypter le mot de passe saisi par l'utilisateur pour faire la comparaison avec le mot de passe d�j� crypt� pour savoir si c'est le bon.


    En vous remerciant ...

    Yabo.

  2. #2
    zul
    zul est d�connect�
    Membre chevronn� Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Par d�faut
    tu peux utiliser le md5 ki fait exactement ce ke tu veux ( c une fonction de hashage, cad chak chaine est cod� de maniere unique mais il est impossible de passer de la chaine crypt�e a la chaine de base ( a par brute force)).

    Je connais pas exactement les fonctions associ� mais je pense ke c implement� de base dans nux

    ZUL

  3. #3
    Membre tr�s actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Par d�faut
    J'ai lu plusieurs fois le man md5 mais impossible d'utiliser les fonctions. Si quelqu'un avait un ptit bout de code ca serait sympa.

    Voil� le code que j'ai (mais qui ne marche pas ...)

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    #include <stdio.h>
    #include <openssl/md5.h>
     
    int main() {
     
    char *Password = "Salut";
     
    unsigned char *md;
     
    printf("%s\n",*MD5((char *) Password, strlen(Password),(char *) md);
    return 0;
    }
    Merci

  4. #4
    Membre �m�rite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    D�tails du profil
    Informations personnelles :
    �ge : 46
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par d�faut
    En lisant le man, il viendrait plutot ca :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h> 
    #include <openssl/md5.h> 
     
    int main() { 
    int i;
    char *Password = "Salut"; 
    unsigned char md[MD5_DIGEST_LENGTH];
    MD5(Password, strlen(Password),md); 
    for(i=0;i<MD5_DIGEST_LENGTH;i++)
        printf("%02x",md[i]);
    return 0; 
    }
    Rq: a linker avec ssl (-lssl)

  5. #5
    Membre tr�s actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Par d�faut
    Ok c'est super ca marche

    Euh c'est ind�cryptable ce syst�me ?

    Si oui il me faudrait quand m�me un type de cryptage qui soit d�cryptable mais pour une autre utilisation

    Dans ce cas ca me donne une chaine assez longue. Je voudrais pouvoir la faire tenir dans une seule variable parceque l� on affiche simplement tout les �l�ments du tableau md[] � la suite les uns des autres ce qui est peu pratique pour faire une comparaison avec un autre mot de passe.

    Merci.

  6. #6
    zul
    zul est d�connect�
    Membre chevronn� Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Par d�faut
    le md5 est indecriptable dans le sens ou il n'existe pas de fonction ki a partir d'un code md5 te permette de retrouver le pass d'origine. Le seul moyen (connu) pour decripter un md5 c du brute force,cad essayer toutes les combinaisons jusk'a trouver la bonne (puisk ke a un md5 ne correspond qu'un pass).

    Si je me rappelle bien la longueur d'un md5 est constante.

    Tu peux utiliser strcmp pour comparer avec un autre md5.

    cryptage reversible pas trop dur a implementer or ou vigenere par exemple.

    ZUL

  7. #7
    Membre �m�rite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    D�tails du profil
    Informations personnelles :
    �ge : 46
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par d�faut
    Citation Envoy� par zul
    Si je me rappelle bien la longueur d'un md5 est constante.
    Oui : MD5_DIGEST_LENGTH.

    Citation Envoy� par zul
    Tu peux utiliser strcmp pour comparer avec un autre md5.
    Euh, en fait je pense pas que tu puisse consider ca comme une chaine de caractere au sens md5. Je m'explique. Pour md, tu peux avoir le char 0 qui represente juste la valeur 0, mais si tu considere ca comme une chaine, strcmp va croire que c'est la fin. Il considerera le exemple AE0012345678
    et AE0034234532 comme etant "egaux".
    Tu peux creer une chaine de taille 2*MD5_DIGEST_LENGTH. Et tu fait un strcmp, ou sinon tu considere ca comme un tableau d'entier (bon de char en fait).
    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
    char *Password="Salut";
    unsigned char md[MD5_DIGEST_LENGTH];
     
    /* cas 1*/
    char passwd[2*MD5_DIGEST_LENGTH+1]; /* 1 char du md5 -> 2 chars */
    MD5(Password,strlen(Password),md);
    for(i=0;i<MD5_DIGEST_LENGTH;i++)
        sprintf(passwd+2*i,"%02x",md[i]);
    if (strcmp(passwd,passwd2)==0) 
        /* ok */
     
    /* cas 2*/
    for(i=0;i<MD5_DIGEST_LENGTH;i++)
        if (md[i]!=md2[i])
            break;
    if (i==MD5_DIGEST_LENGTH)
        /* ok */

  8. #8
    gl
    gl est d�connect�
    R�dacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par d�faut
    Citation Envoy� par D[r
    eadLock]
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    /* cas 2*/
    for(i=0;i<MD5_DIGEST_LENGTH;i++)
        if (md[i]!=md2[i])
            break;
    if (i==MD5_DIGEST_LENGTH)
        /* ok */
    Tu peux utilise memcmp aussi.

  9. #9
    Membre tr�s actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Par d�faut
    Jai pas tout compris a ton code D[r]eadLock.

    En fait voil� la situation exacte :

    Je fais une appli client/serveur sous forme d'un chat. Lorsque l'on fait un serveur on peut r�gler plusieurs options tels mettre un mot de passe par exemple. Lorsque le client se connecte il apparait alors une invite lui demandant le mot de passe. Une fois saisi il est envoi� au serveur via un socket. Ce que je voudrais c'est que le passe soit crypt� du c�t� client, transmis au serveur et compar� avec le passe originale lui-m�me crypt�.

    Donc il faudrais stock� le mot de passe du client crypt� dans une variable (Client_Password) et celle du serveur dans une autre variable (Server_Password). Et ensuite faire une comparais comme si c'�tais des char.
    Enfin c'�tais mon id�e.

  10. #10
    Membre �m�rite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    D�tails du profil
    Informations personnelles :
    �ge : 46
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par d�faut
    Citation Envoy� par Yabo
    Ce que je voudrais c'est que le passe soit crypt� du c�t� client, transmis au serveur et compar� avec le passe originale lui-m�me crypt�.

    Donc il faudrais stock� le mot de passe du client crypt� dans une variable (Client_Password) et celle du serveur dans une autre variable (Server_Password). Et ensuite faire une comparais comme si c'�tais des char.
    Enfin c'�tais mon id�e.
    Le plus simple est donc ce qui est fait dans le cas 1. Tu cree un chaine de caractere correcte (qui contient en fait ce qui etait dans mon 1er exemple affiche).
    Cote client:
    tu lis le mot de passe, tu le transforme en chaine correcte. Tu transmet donc passwd.

    Cote serveur, tu stocke uniquement les chaines correctes. et tu compares (avec strcmp) la chaine que t'as stockee avec celle que tu recois.

    Par contre le fichier qui contient les mots de passe (pour le root) ne doit pas etre accessible (droits en lecture uniquement au serveur, pas aux clients).

    Citation Envoy� par gl
    memcpy
    Humm, j'y avais pas pense ! (car jamais utilise-> inconnue au bataillon). A mettre quelque part dans un recoin de ma tete.

  11. #11
    Membre tr�s actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Par d�faut
    Mais comme j'ai dis j'ai pas tout compris � ton code.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    char passwd[2*MD5_DIGEST_LENGTH+1];
    Pourquoi 2*MD5_DIGEST_LENGTH ?

    O� est-ce que tu attribues la valeur du mot de passe crypt� � passwd ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
     sprintf(passwd+2*i,"%02x",md[i]);
    Je ne comprends pas cette ligne non plus .

    Merci

  12. #12
    Membre �m�rite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    D�tails du profil
    Informations personnelles :
    �ge : 46
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par d�faut
    Citation Envoy� par Yabo
    Mais comme j'ai dis j'ai pas tout compris � ton code.
    Xcuse...
    [/quote]

    Citation Envoy� par Yabo
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    char passwd[2*MD5_DIGEST_LENGTH+1];
    Pourquoi 2*MD5_DIGEST_LENGTH ?
    Car pour chaque char du md, tu affiche 2 caracteres (car c'est un unsigned char, donc sur 8 bits -> affiche en hexa, ca donne 2 caracteres). Exemple si tu as le md[0] qui vaut 63, soit 0x3F, on affichera..... 3f (ici en minuscule avec le x, si tu veux des majuscules, c'est X);

    Citation Envoy� par Yabo
    O� est-ce que tu attribues la valeur du mot de passe crypt� � passwd ?
    Avec ce qui suit:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
     sprintf(passwd+2*i,"%02x",md[i]);
    Tu mets dans la chaine passwd, aux caracteres 2i et 2i+1, la representation hexa minuscule (x) sur 2 caracteres (2), completee par un 0 si besoin (0 : si 4 -> 04, comme ca on a toujours 2 chars).

    C'est un peu plus clair ?

  13. #13
    Membre tr�s actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Par d�faut
    Et donc ensuite je peux faire un simple :

    ?

  14. #14
    gl
    gl est d�connect�
    R�dacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par d�faut
    Oui mais il afichera le mot de passe chiffrer et non le mot de passe en clair. Le code de D[r]eadLock utilise un mot de passe en dur ("salut") pou le test, il te suffit de le remplacer par la saisie utilisateur, pis l'appel a MD5 et le sprintf cree une chaine de caractere qui contient le mot de passe chiffrer. Il rste a l'envoyer au serveur, sur celui ci de lire le mot de passe dans le fichier et tu fais l'appel a strcmp pour comparer les deux mots de passe

  15. #15
    Membre tr�s actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Par d�faut
    D'accord merci beaucoup � tout le monde

    RESOLU

  16. #16
    Membre �clair� Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Par d�faut
    Peut on r�cup�rer le md5.h quelque part pour l'utiliser sous windows ?
    Merci

  17. #17
    Expert �minent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retrait�
    Inscrit en
    D�cembre 2003
    Messages
    14 512
    D�tails du profil
    Informations personnelles :
    �ge : 69
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Retrait�

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 14 512
    Par d�faut
    Citation Envoy� par SteelBox
    Peut on r�cup�rer le md5.h quelque part pour l'utiliser sous windows ?
    Merci
    Encore une fois, 'md5.h' n'est qu'un fichier d'interface �crit pour une plateforme donn�e.

    Pour utiliser MD5 sous Windows, il faut imp�rativement r�cup�rer lla biblioth�que et le fichier d'ent�te qui on �t� con�u pour cette plateforme.

    Soit c'est quelque part dans l'API Windows (voir MSDN) soit c'est une biblioth�que tierce, et dans ce cas, google est ton ami.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Web 	Résultats 1 - 10 sur un total d'environ 79,100 pour md5 library windows. (0.54 secondes)

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    20
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 20
    Par d�faut
    j'ai voulu faire le meme systeme que toi sauf que ... mallheureusement ...

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    crypt.o(.text+0x20): In function `crypt_passwd':
    : undefined reference to `MD5'
    collect2: ld returned 1 exit status
    make: *** [all] Error 1
    Voici mon code :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <openssl/md5.h>
     
    int     crypt_passwd(char *passwd)
    {
      int           i;
      unsigned char md[MD5_DIGEST_LENGTH];
      MD5(passwd, strlen(passwd), md);
      for (i = 0; i < MD5_DIGEST_LENGTH; i++)
        printf("%02x", md[i]);
      return (0);
    }
    Je precise que je suis Sous linux et que j'ai bien les bonnes librairies.
    Mon md5.h existe

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    20
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 20
    Par d�faut
    c bon j'ai trouver, il me manquai juste le -lssl dans les CFLAGS de mon makefile

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Crypter une chaine de caract�re
    Par davels dans le forum Delphi
    R�ponses: 14
    Dernier message: 28/05/2020, 13h34
  2. R�ponses: 9
    Dernier message: 24/06/2008, 15h18
  3. crypter une chaine de caract�re
    Par tiboo dans le forum C++
    R�ponses: 27
    Dernier message: 08/03/2008, 17h49
  4. [C#] crypter une chaine de caract�re
    Par FraktaL dans le forum Windows Forms
    R�ponses: 4
    Dernier message: 30/08/2006, 20h23
  5. R�ponses: 2
    Dernier message: 06/12/2002, 07h50

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