Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

STOCKAGE DE MOT DE PASSE CRYPTÉ


Information sur la source

Catégorie :Sécurité Niveau : Débutant Date de création : 03/05/2003 Date de mise à jour : 03/05/2003 00:54:05 Vu / téléchargé: 6 854 / 552

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note


Description

Comme le disait Delphiprog dans une de ses dernières sources, "Il semble que la saisie de mots de passe soit en vogue en ce moment" !!
Quelqu'un m'a justement demandé, récemment, comment crypter un mot de passe, pour le stocker dans un fichier... Car il est évident que stocker un mot de passe en clair dans un fichier est un trou de sécurité énorme !!

Ma source présente donc une petite fonction de hachage... Le principe est (ici)d'effectuer des opérations sur les valeurs numériques de chaque caractère du mot de passe, pour le transformer en un nombre unique pour chaque texte différent... L'opération se veut irréversible, mais je ne garanti pas à 100% que la mienne le soit !!
En toute logique, c'est le cas, je pense, mais je laisse le soin à ceux qui aime les défis de le vérifier !!
La valeur numérique obtenue peu donc être stockée en toute sécurité telle quelle... Ensuite, pour vérifier qu'un mot de passe est valide, on applique la fonction de hachage sur le mot de passe donné, et on compare les deux valeurs numériques !
  
 

Source

  • //Ma fonction de hachage... Voir le ZIP pour l'utilisation
  • function Hachage(Pass: String): Integer;
  • var i: Integer;
  • x: Int64;
  • const cst1: Int64 = $3AD3C18F;
  • cst2: Int64 = $0000564B;
  • begin
  • Result := 0;
  • for i := 1 to Length(Pass) do
  • begin
  • Result := (Result shl 4) + (Ord(Pass[i]) xor cst2);
  • x := Result and cst2;
  • If x <> 0 then
  • Result := Result xor (x shr 4);
  • Result := Result * (cst1 + (cst2 mod (not x)));
  • Result := Result * 2 + 1;
  • //Le nombre sera impair... Pourquoi ?! Pourquoi pas ?!!
  • end;
  • end;
//Ma fonction de hachage... Voir le ZIP pour l'utilisation

function Hachage(Pass: String): Integer;
var i: Integer;
    x: Int64;
const cst1: Int64 = $3AD3C18F;
      cst2: Int64 = $0000564B;
begin

  Result := 0;

  for i := 1 to Length(Pass) do
    begin

      Result := (Result shl 4) + (Ord(Pass[i]) xor cst2);
      x := Result and cst2;

      If x <> 0 then
        Result := Result xor (x shr 4);

      Result := Result * (cst1 + (cst2 mod (not x)));
      Result := Result * 2 + 1;
      //Le nombre sera impair... Pourquoi ?! Pourquoi pas ?!!
    end;

end;  

Conclusion

Pour le nombre impair, c'était juste comme ça... ;o)

Comme je l'ai dit plus haut, je ne garantit pas que ma fonction soit fiable à 100%... Je ne suis pas expert en sécurité !!

Un dernier point : au niveau "trou de sécurité", il est évident qu'on ne peut normalement pas laisser le "If ... then ... else" à la fin pour comparer les deux valeurs numériques et agir en conséquence... Mais c'est un autre problème !!!

Je n'ai pas commenté le code, car il n'est pas compliqué... Si vous avez toutefois des questions, n'hésitez pas !  
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Delphiprog le 03/05/2003 09:39:24 administrateur CS

Depuis Delphi 6, les constantes typées affectables ne sont plus acceptées par défaut comme c'était le cas auparavant. Vous devrez donc activer la directive de compilation {$J+} ou, sous son autre forme, {$WRITEABLECONST ON} ou plus simplement, dans Projet/Options/Compilateur cocher la case "Constantes typées affectables".
Mais cette possibilité est déconseillée par Borland car ils envisagent de supprimer cette faculté et recommandent de mettre, à la place, une variable globale que l'on peut initialiser.
Ceci était une "anomalie" du Pascal, paraît-il !
Je trouvais celà bien pratique puisqu'elles se comportaient comme des variables statiques évitant l'usage de variables globales. Mais bon, on a plus le choix...

signaler à un administrateur
Commentaire de Bestiol le 03/05/2003 12:32:16

Euh... Je n'ai rien fait de ce que tu dis, dans Delphi 7, et tout fonctionne sans problème !!
Je retient toutefois l'avertissement de Borland !

merci !

signaler à un administrateur
Commentaire de Delphiprog le 03/05/2003 13:39:46 administrateur CS

Extrait de l'aide en ligne à propos des constantes typées affectables :
"Dans les versions précédentes de Delphi et de Borland Pascal, les constantes typées étaient toujours modifiables, ce qui correspond au mode {$J+}. L'ancien code source utilisant des constantes typées affectables doit être compilé en mode {$J+}, mais pour les nouvelles applications, il est conseillé d'initialiser les variables et de compiler votre code en mode {$J-}."
Peut-être cette option est-elle cochée par défaut pour tes nouvelles applications ?

signaler à un administrateur
Commentaire de Bestiol le 03/05/2003 15:00:52

Et bien je viens de regarder, et ce n'est pas le cas... Quant à la directive {J+} ou {J-}, j'ai jamais vu !!

signaler à un administrateur
Commentaire de jer64 le 05/05/2003 21:56:30

Bonjour,

Ton code fonctionne trés bien, mais en rentrant dans le fichier pass.ini si tu effaces la chaine numérique, le mot de passe est réinitialisé en valeur vide.

signaler à un administrateur
Commentaire de Delphiprog le 05/05/2003 22:31:33 administrateur CS

Pour jer64 : c'est tout à fait normal !
Le but de ce code source est, avant tout, de fournir une fonction de hachage, en aucun aucun cas de démontrer l'inviolabilité d'un système.

signaler à un administrateur
Commentaire de jer64 le 05/05/2003 23:58:45

Alors comment peut on faire pour certe ne pas rendre inviolable le mot de passe mais pour s'en rapprocher?

signaler à un administrateur
Commentaire de Bestiol le 06/05/2003 11:21:06

Si tu es sûr qu'un mot de passe est nécessaire, tu peux vérifier que le bon, crypté, soit bien présent...

Mais, au niveau du stockage en lui-même, je pense que c'est n'est pas une bonne solution en soit !! (j'ai fait ce source pour répondre à une question !)
En effet, avec un petit coup de reverse enginering (je suis pas sûr de l'orthographe, mais la prononciation y est !!), il n'est "pas compliqué" (pour un cracker), de retrouver l'algorithme de hachage, de trouver quelle valeur prendrait le mot de passe qu'il désire utiliser, et de remplacer la valeur stockée par sa valeur !!

Tous les programmes avec des clés de série ne font aucun stockage : pour preuve, tu peux utiliser plusieurs clefs avec le même programme... Il s'agit en fait d'un algorithme qui vérifie que la clef a une structure valide... Des caractères ne sont même parfois présents que pour la forme !!

Voilà, j'espère que cela t'a un peu éclairé... Si tu veux, je pourrais essayer de faire un source avec gestion de clef de série... Sachant que j'ai déjà sorti un source similaire : http://www.delphifr.com/article.aspx?Val=1872

Bonne prog' !

signaler à un administrateur
Commentaire de jer64 le 06/05/2003 18:51:12

Merci beaucoup, je vais regardé ton code.

signaler à un administrateur
Commentaire de MUSTAPH_A le 30/08/2005 11:53:51

si bon merci

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.