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

Free Pascal Discussion :

Gestion de mot de passe


Sujet :

Free Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    MIAGE
    Inscrit en
    Février 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : MIAGE
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 16
    Par défaut Gestion de mot de passe
    Salut SVP je voudrais savoir comment chiffrer un mot de passe avec le compilateur Free Pascal

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 130
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Cela dépend du niveau de sécurité dont vous avez besoin et de votre intérêt. Est-ce que vous voulez juste une solution qui fonctionne (quitte à ne pas savoir comment elle fonctionne), ou est-ce que vous êtes intéressé par le côté programmation ?

    Personnellement j'aime bien les algorithmes les plus simples. Souvent on n'a pas vraiment besoin d'un haut niveau de sécurité, et dans ce cas il est plus amusant de bricoler quelque chose soi-même.

  3. #3
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par amadou299 Voir le message
    Salut Svp je voudrais savoir comment chiffrer un mot de passe avec le compilateur Free Pascal
    Bonjour,

    Je répondrais comme Roland, en ajoutant ceci : "chiffrer un mot de passe" n'est pas en rapport direct avec Free Pascal, car les algorithmes utilisables sont universels et par conséquent largement indépendants du langage de programmation choisi.
    On peut imaginer un codage élémentaire, du genre échanger des lettres, jusqu'à des bibliothèques complètes comme DCPCrypt
    Dans le premier cas, on essaye de comprendre et d'améliorer ses connaissances, dans le second on réutilise la travail d'autrui afin de l'intégrer au sien...
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  4. #4
    Membre chevronné

    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2015
    Messages : 145
    Par défaut
    En complément...


    C'est vrai qu'il n'y a pas à proprement parler de fonction "EncrypterMotDePasse" dans Free Pascal. Mais il est cependant très facile d'implémenter des choses simples (pour vraiment un minimum de sécurité).



    Tout d'abord quelques fondamentaux (au cas où):

    - pour des raisons de sécurité, on ne crypte d'habitude pas un mot de passe (en tous les cas, pas si le but est juste de le vérifier ensuite). On "hash" (cf. https://fr.wikipedia.org/wiki/Fonction_de_hachage) ce mot de passe, puis on stocke le hash ainsi obtenu,

    - ensuite, lorsque l'on doit vérifier le mot de passe, on hash également le mot de passe entré par l'utilisateur, et on vérifie que le hash nouvellement obtenu est bien identique à celui stocké,

    - pour éviter de pouvoir casser trop rapidement les mots de passe stockés, on utilise additionnellement un "salt" (cf. https://fr.wikipedia.org/wiki/Salage...yptographie%29), ainsi éventuellement que des fonctions additionnelles de transformation.



    Il est donc possible de réaliser facilement ces opérations avec des fonctions de base; en sachant cependant que cela ne fournit qu'une protection minimale (mais c'est en tous les cas mieux que de stocker directement le mot de passe encrypté).

    Pour une "réelle" protection, il faut utiliser des algorithmes spécifiques (mais qui à la base utilisent toujours les concepts fondamentaux ci-avant). Par exemple:
    - PBKDF2: https://fr.wikipedia.org/wiki/PBKDF2,
    - Bcrypt: https://en.wikipedia.org/wiki/Bcrypt
    - ou mieux Scrypt: https://fr.wikipedia.org/wiki/Scrypt.



    Pour résumer:

    - pour un minimum de sécurité (il faut bien comprendre que c'est vraiment un "minimum") et pour des questions de facilité, on peut utiliser une fonction de hash standard sur un mot de passe + un salage. Par défaut, Free Pascal intègre les fonctions de hash MD5 et SHA1 (qui ne se sont plus considérées comme étant sécurisées). Le résultat obtenu peut ensuite être stocké/utilisé par exemple avec des fonctions d'encodage en base64 (en standard aussi dans Free Pascal), pour une meilleure facilité d'utilisation (le résultat n'étant pas directement une chaîne de caractères, mais du binaire).

    - pour faire les choses "dans l'état de l'art" (et bien que je persiste à penser que c'est une sécurité plutôt "illusoire" dans le cas de programmes classiques pour ordinateur), il faut utiliser des fonctions issues d'algorithmes dédiés. On trouve des bibliothèques de base pour cela, comme DCPCrypt (http://wiki.freepascal.org/DCPcrypt). Et voici un exemple de mise en application (non testé): http://keit.co/p/dcpcrypt-hmac-rfc2104/

    Il existe aussi des implémentations de Bcrypt et Scrypt pour Delphi et plus précisément:
    - https://github.com/JoseJimeniz/bcrypt-for-delphi
    - https://github.com/JoseJimeniz/scrypt-for-delphi
    mais je ne sais pas si elles fonctionnent aussi avec Free Pascal.

    A voir aussi: http://www.wolfgang-ehrhardt.de/crypt_en.html

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 130
    Billets dans le blog
    9
    Par défaut
    En attendant mieux, voici une très simple unité que j'ai faite. Je vous laisse juge de ses avantages et de ses inconvénients.

    Le principe est d'avoir une table qui à chaque ansichar associe un autre ansichar, avec une autre table qui contient l'association réciproque :

    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
     
    const
      T1: array[ansichar]of ansichar =
        #229#117#013#064#153#010#040#190#231#151#065#062#052#043#122#239+
        #198#074#048#069#018#169#123#011#217#189#174#058#004#203#147#035+
        #224#096#001#138#183#157#163#161#076#078#126#113#158#028#253#075+
        #108#234#095#238#026#084#012#170#218#093#092#167#168#027#118#140+
        #006#237#241#136#005#244#091#132#047#129#044#131#225#155#086#145+
        #107#184#207#114#089#051#142#097#210#083#021#213#109#099#206#139+
        #141#063#055#245#110#120#046#085#193#164#090#208#201#133#059#053+
        #060#134#181#219#007#009#228#182#188#135#105#003#196#222#179#016+
        #112#178#205#127#230#254#025#195#116#232#149#125#137#019#236#067+
        #002#177#039#098#033#102#087#240#032#211#150#199#038#172#024#197+
        #202#072#056#216#191#194#242#243#246#045#166#057#251#020#022#081+
        #121#042#101#160#088#015#119#041#175#111#023#162#185#030#104#200+
        #180#037#154#017#082#187#171#212#094#250#070#029#050#146#100#066+
        #192#220#106#079#226#124#077#128#173#255#221#148#068#073#176#249+
        #103#036#130#215#049#014#227#144#165#235#152#223#247#071#115#186+
        #034#252#080#000#143#156#233#159#061#248#204#054#214#209#031#008;
     
      T2: array[ansichar]of ansichar =
        #243#034#144#123#028#068#064#116#255#117#005#023#054#002#229#181+
        #127#195#020#141#173#090#174#186#158#134#052#061#045#203#189#254+
        #152#148#240#031#225#193#156#146#006#183#177#013#074#169#102#072+
        #018#228#204#085#012#111#251#098#162#171#027#110#112#248#011#097+
        #003#010#207#143#220#019#202#237#161#221#017#047#040#214#041#211+
        #242#175#196#089#053#103#078#150#180#084#106#070#058#057#200#050+
        #033#087#147#093#206#178#149#224#190#122#210#080#048#092#100#185+
        #128#043#083#238#136#001#062#182#101#176#014#022#213#139#042#131+
        #215#073#226#075#071#109#113#121#067#140#035#095#063#096#086#244+
        #231#079#205#030#219#138#154#009#234#004#194#077#245#037#044#247+
        #179#039#187#038#105#232#170#059#060#021#055#198#157#216#026#184+
        #222#145#129#126#192#114#119#036#081#188#239#197#120#025#007#164+
        #208#104#165#135#124#159#016#155#191#108#160#029#250#130#094#082+
        #107#253#088#153#199#091#252#227#163#024#056#115#209#218#125#235+
        #032#076#212#230#118#000#132#008#137#246#049#233#142#065#051#015+
        #151#066#166#167#069#099#168#236#249#223#201#172#241#046#133#217;
    Là-dessus j'ai deux fonctions de chiffrage et de déchiffrage qui substituent les caractères d'une chaîne conformément aux tables :

    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
    {$INCLUDE table.inc}
     
    function Encrypt(const s: ansistring): ansistring;
    var
      i: integer;
    begin
      SetLength(result, Length(s));
      for i := 1 to Length(result) do
        result[i] := T1[s[i]];
    end;
     
    function Decrypt(const s: ansistring): ansistring;
    var
      i: integer;
    begin
      SetLength(result, Length(s));
      for i := 1 to Length(result) do
        result[i] := T2[s[i]];
    end;
    Les fonctions s'utilisent ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    uses
      Crypt;
     
    var
      mdp: ansistring;
     
    begin
      mdp := 'toto';
     
      mdp := Encrypt(mdp);
      mdp := Decrypt(mdp);
     
      WriteLn(mdp); // toto
    Il y a un programme qui permet de générer aléatoirement une nouvelle table.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [VBA-E]Gestion de mot de passe
    Par Yolak dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 18/04/2007, 13h23
  2. Gestion de mot de passe
    Par cyril.ppn dans le forum C++Builder
    Réponses: 7
    Dernier message: 14/02/2007, 12h06
  3. gestion des mot de passe avec Access
    Par cyberbiker dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 07/09/2006, 15h42
  4. [LG] Gestion de mot de passe
    Par kakaroto dans le forum Langage
    Réponses: 3
    Dernier message: 02/08/2005, 09h13
  5. Génération aléatoire et gestion de mots de passe
    Par thomine dans le forum Sécurité
    Réponses: 5
    Dernier message: 23/03/2005, 16h58

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