begin process at 2012 02 11 03:16:07
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité

 > STOCKAGE DE MOT DE PASSE CRYPTÉ

STOCKAGE DE MOT DE PASSE CRYPTÉ


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :8 949 / 674

Auteur : Bestiol

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (12)
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

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip COLORATION SYNTAXIQUE AVEC TPARSER !!
Source avec Zip PETITE SCENE EN OPENGL
Source avec Zip DÉCOUPAGE DE FICHIER WAV
Source avec Zip UTILISER UN NUMÉRO DE SÉRIE
Source avec Zip CONCATENATION DE FICHIERS WAV

 Sources de la même categorie

Source avec Zip Source avec une capture EXE PROTECTOR V1 par MrClock
Source avec Zip Source avec une capture LYNX : CHIFFREMENT À BLOC/FLUX, EXEMPLE INCLUS par Bacterius
Source avec Zip FBCREATEUSER par fbalien
Source avec Zip Source avec une capture SCANNER DE MALWARES ( ßE SCANNER ) par MrClock
Source avec Zip Source avec une capture GOLDEN PASSWORDS - STOCKEZ VOS MOTS DE PASSE ! par Bacterius

Commentaires et avis

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...

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 !

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 ?

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 !!

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.

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.

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?

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' !

Commentaire de jer64 le 06/05/2003 18:51:12

Merci beaucoup, je vais regardé ton code.

Commentaire de MUSTAPH_A le 30/08/2005 11:53:51

si bon merci

Commentaire de Bacterius le 04/10/2009 03:35:39

Ouille ouille ! Un modulo variable ? (mod (not x))
Pourquoi ne pas avoir utilisé du MD5 pour stocker les mots de passe cryptés ? (ou encore du SHA mais je ne suis pas sûr qu'il était très répandu à l'époque du dépôt de cette source)
L'algorithme que tu nous proposes là semble quand même assez faible, car à cause du modulo variable, on peut facilement obtenir des collisions, ce qui est très mauvais pour une fonction de hachage cryptographique.

Quelques liens :

http://www.delphifr.com/codes/MD5-API-CELEBRE-ALGORITHME-HACHAGE-SOUS-DELPHI_40137.aspx
--> Algorithme MD5 par f0xi

http://www.delphifr.com/codes/TINYHASH-MD5-MD4-SHA1_41404.aspx
--> MD5, MD4 et SHA-1 par f0xi (utilise les API Windows)

http://www.delphifr.com/codes/ALGORITHME-HASH-LEA_50065.aspx
--> Algorithme de hachage cryptographique LEA par moi
(attention ! elle n'est pas démontrée sûre - mais elle n'a pas été démontrée non-sûre non plus ...)

Cordialement, Bacterius !

Commentaire de Bacterius le 04/10/2009 03:37:26

Ah en passant, en faisant "Result := Result * 2 + 1", tu prives la fonction de hachage de la moitié de son ensemble de hachage : les nombres pairs. :'(

Cordialement, Bacterius !

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,515 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales