[Delphi] Stockage d'un mot de passe. [Résolu]

Stockage d'un mot de passe. [Résolu] [Delphi] - Delphi/Pascal - Programmation

Marsh Posté le 21-09-2003 à 19:37:52    

Bonjour à tous,
 
Je viens de me mettre au Delphi, et pour les besoins de mon application j'aurais besoin de conserver le mot de passe utilisateur afin que celui ci n'est pas à le mettre à chaque fois.
 
Quel est le meilleur moyen donc pour conserver ce mot de passe dans les meilleures conditions ( j'etends par la impossibilité de le retrouver en éditant un fichier ou je ne sais quoi..)
 
Merci de votre aide!!
 
Grouzou


Message édité par Grouzou le 21-09-2003 à 19:49:58
Reply

Marsh Posté le 21-09-2003 à 19:37:52   

Reply

Marsh Posté le 21-09-2003 à 19:39:29    

ben comme la méthode classique
 
tu mémorises les mot de passe passé à la moulinnette par une fonction de hachage, c'est à dire pas réversible
 
saisis de l'utilisateur, moulinette, comparaison avec le fichier

Reply

Marsh Posté le 21-09-2003 à 19:41:44    

Hmm c'est vrai que c'est tout bête en fait... mais je ne sais pas pourquoi dans mon cas pensais que ce n'était pas faisable ( un client et serveur...) mais en fait c'est faisable sans aucun probleme.... :)
 
Hmm en Delphi c'est quoi le nom de la fonction qui permet ce hachage??? .......... Bon ok je vais voir dans l'aide ;)
 
Merci pour ta réponse

Reply

Marsh Posté le 21-09-2003 à 19:42:55    

aucune idée, j'ai fait un semestre de pascal y a longtemps  :)
 
sous GNU/linux, ça passe par crypt et du MD5


Message édité par Taz le 21-09-2003 à 19:43:20
Reply

Marsh Posté le 21-09-2003 à 19:44:32    

Moi le seul pascal que j'ai fait c'était en seconde durant mes TP de physique... Sonde "Orhpy" ou un truc du style.... et je sais pas pourquoi on a pas vu la fonction de cryptage ;-)
 
Merci tout de meme pour ton aide :)

Reply

Marsh Posté le 21-09-2003 à 19:55:47    

ici http://www.fichtner.net/delphi/md5.delphi.phtml tu trouveras une unité pour utiliser l'algo md5

Reply

Marsh Posté le 21-09-2003 à 20:05:29    

Merci bicoup :)

Reply

Marsh Posté le 21-09-2003 à 20:53:48    

moi j'utilise ça :
 

Code :
  1. function Encrypt(Value: string): string;
  2. var
  3. i: Integer;
  4. b: byte;
  5. begin
  6.   result := '';
  7.   for i:=1 to Length(Value) do
  8.     Value[i] := Char(Byte(Value[i]) xor i);
  9.   for i:=1 to Length(Value) do
  10.   begin
  11.     b := byte(Value[i]) AND $0F;
  12.     b := ord('A')+b;
  13.     result := result+char(b);
  14.     b := (byte(Value[i]) AND $F0) shr 4;
  15.     b := ord('a')+b;
  16.     result := result+char(b);
  17.   end;
  18. end;
  19. function Decrypt(Value: string): string;
  20. var
  21. i,j: Integer;
  22. b,c: byte;
  23. begin
  24.   result := '';
  25.   i := 1;
  26.   j := 1;
  27.   while i<Length(Value) do
  28.   begin
  29.     b := byte(Value[i])-ord('A');
  30.     c := (byte(Value[i+1])-ord('a')) shl 4;
  31.     b := b+c;
  32.     Value[j] := char(b);
  33.     inc(i,2);
  34.     inc(j,1);
  35.   end;
  36.   SetLength(Value,Length(Value) div 2);
  37.   for i:=1 to Length(Value) do
  38.     result := result+Char(Byte(Value[i]) xor i);
  39. end;


 
je sais pas ce que ça vaut, c'est pas moi qui l'avait fait :D
 
Taz >> je vois pas trop où tu veux en venir, avec un système non réversible comment tu fais puisqu'il demandait "conserver le mot de passe utilisateur afin que celui ci n'est pas à le mettre à chaque fois."... le md5 ça va pas fort pour ça, non ?


Message édité par antp le 24-09-2003 à 17:16:05

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 21-09-2003 à 20:56:15    

ben c'est très très mauvais !

Reply

Marsh Posté le 21-09-2003 à 20:56:28    

Taz a écrit :

ben c'est très très mauvais !


 
 :heink:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 21-09-2003 à 20:56:28   

Reply

Marsh Posté le 21-09-2003 à 20:57:22    

ben c'est cassable très facilement, ce n'est absolument pas sur. aucun système digne de ce nom ne procède comme ça

Reply

Marsh Posté le 21-09-2003 à 21:07:05    

Taz a écrit :

ben c'est cassable très facilement, ce n'est absolument pas sur. aucun système digne de ce nom ne procède comme ça

de toute facon,il est toujours possible de cracker le logiciel, un logiciel sécurisé a 100 % n'existe pas [:spamafote]


---------------
lecteur mp3 yvele's smilies jeux de fille
Reply

Marsh Posté le 21-09-2003 à 21:07:49    

Taz a écrit :

ben c'est cassable très facilement, ce n'est absolument pas sur. aucun système digne de ce nom ne procède comme ça

J'me disais la même chose qu'antp :

Citation :

Taz >> je vois pas trop où tu veux en venir, avec un système non réversible comment tu fais puisqu'il demandait "conserver le mot de passe utilisateur afin que celui ci n'est pas à le mettre à chaque fois."... le md5 ça va pas fort pour ça, non ?

:heink:

Reply

Marsh Posté le 21-09-2003 à 21:11:15    

Taz a écrit :

ben c'est cassable très facilement, ce n'est absolument pas sur. aucun système digne de ce nom ne procède comme ça


 
bah dis comment ils font alors les softs qui retiennent les mots de passe :D je me doute qu'il doit y avoir des trucs plus sûrs, mais bon faut voir aussi le degré de sûreté nécessaire...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 21-09-2003 à 21:17:25    

antp a écrit :


 
bah dis comment ils font alors les softs qui retiennent les mots de passe :D je me doute qu'il doit y avoir des trucs plus sûrs, mais bon faut voir aussi le degré de sûreté nécessaire...

ben ces trucs facilement cassables

Reply

Marsh Posté le 22-09-2003 à 10:41:49    

antp a écrit :

moi j'utilise ça :
 

Code :
  1. function Encrypt(Value: string): string;
  2. var
  3. i: Integer;
  4. b: byte;
  5. begin
  6.   result := '';
  7.   for i:=1 to Length(Value) do
  8.     Value[i] := Char(Byte(Value[i]) xor i);
  9.   for i:=1 to Length(Value) do
  10.   begin
  11.     b := byte(Value[i]) AND $0F;
  12.     b := ord('A')+b;
  13.     result := result+char(b);
  14.     b := (byte(Value[i]) AND $F0) shr 4;
  15.     b := ord('a')+b;
  16.     result := result+char(b);
  17.   end;
  18. end;
  19. function Decrypt(Value: string): string;
  20. var
  21. i,j: Integer;
  22. b,c: byte;
  23. begin
  24.   result := '';
  25.   i := 1;
  26.   j := 1;
  27.   while i<Length(Value) do
  28.   begin
  29.     b := byte(Value[i])-ord('A');
  30.     c := (byte(Value[i+1])-ord('a')) shl 4;
  31.     b := b+c;
  32.     Value[j] := char(b);
  33.     inc(i,2);
  34.     inc(j,1);
  35.   end;
  36.   SetLength(Value,Length(Value) div 2);
  37.   for i:=1 to Length(Value) do
  38.     result := result+Char(Byte(Value[i]) xor i);
  39. end;


 
je sais pas ce que ça vaut, c'est pas moi qui l'avait fait :D
 
Taz >> je vois pas trop où tu veux en venir, avec un système non réversible comment tu fais puisqu'il demandait "conserver le mot de passe utilisateur afin que celui ci n'est pas à le mettre à chaque fois."... le md5 ça va pas fort pour ça, non ?


 
Antp / Taz >> Me corriger si j'ai mal compris, mais le truc est de conserver la chaine crypté en md5 sur le client, de lui envoyer ca et de comparer avec le md5 du server, si ca match c'est gagné, sinon erreur?
 
Du moins moi je le vois comme ca :)
 
Antp >> Tes fonctions de cryptage elles suivent un algo particulier exsistant ou c'est une création?


Message édité par Grouzou le 24-09-2003 à 17:16:19
Reply

Marsh Posté le 22-09-2003 à 12:03:20    

Grouzou a écrit :


Antp / Taz >> Me corriger si j'ai mal compris, mais le truc est de conserver la chaine crypté en md5 sur le client, de lui envoyer ca et de comparer avec le md5 du server, si ca match c'est gagné, sinon erreur?


 
Oui si c'est ton programme qui fait la comparaison et qui dit si l'utilisateur a accès. Si ton programme envoie juste un mot de passe au serveur, là le md5 ne te servira à rien.
 

Grouzou a écrit :


Antp >> Tes fonctions de cryptage elles suivent un algo particulier exsistant ou c'est une création?


 
je pense que ce n'est pas basé sur un truc existant, mais comme je l'ai dit ce n'est pas moi qui ai écrit ces fonctions ;)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 22-09-2003 à 15:02:04    

Grouzou a écrit :

Bonjour à tous,
 
Je viens de me mettre au Delphi, et pour les besoins de mon application j'aurais besoin de conserver le mot de passe utilisateur afin que celui ci n'est pas à le mettre à chaque fois.
 
 


 
Humm revenons à nos moutons.....
 
Déjà, quel est l'intérêt de conserver un MdP crypté qq part si l'utilisateur n'a pas à le ressaisir ?
 
Par quel miracle le soft va reconnaître l'utilisateur ?

Reply

Marsh Posté le 22-09-2003 à 15:12:30    

Je donne l'option à l'utilisateur de concerver le mot de passe, ensuite à lui de voir qui va utiliser l'appli...
 
Mais bon comme c'est un petit soft rien que pour moi et quelques amis ca n'a pas grande importance. ( un soft de communication style irc ou msn car on en a marre d'utiliser les mails internes :) (et on a pas acces à internet )
 
Je  fais juste cela pour m'initier à Delphi, ensuite si je concois des softs de plus grande importance je mettrai une part plus importante à la sécurité

Reply

Marsh Posté le 22-09-2003 à 15:13:03    

QI130 a écrit :


 
Humm revenons à nos moutons.....
 
Déjà, quel est l'intérêt de conserver un MdP crypté qq part si l'utilisateur n'a pas à le ressaisir ?
 
Par quel miracle le soft va reconnaître l'utilisateur ?

ben que le mdp crypté qu'il a dans son cookie, bern quand il s'identifie avec le serveur, tout ne passe pas en clair.
 
je crois que c'est pas compliqué à comprendre

Reply

Marsh Posté le 22-09-2003 à 16:14:44    

Sinon, j'ai une autre question....  
 
Je ne me l'était pas posé mais je crois que je vais avoir un problème...
 
Comment fait on pour faire accepter à un server plusiseurs connection client sur le même port?? (gestion multithread?)
 
(j'utilise les composants livrés avec Delphi 6)

Reply

Marsh Posté le 22-09-2003 à 16:27:35    

bah il l'accepte sans problème, non ? enfin faut voir comment tu le gères :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 22-09-2003 à 16:33:58    

Ben en fait j'ai déjà du mal à me connecter avec un seul client  :D  
 
Mais comme j'anticipe sur mon dev je me demandais comment je pouvais savoir de quel client venait le message... :(

Reply

Marsh Posté le 22-09-2003 à 16:36:24    

Il te passe le socket en paramètre (un TCustomWinSocket)
Suffit de savoir quel client est sur quel socket (à la connexion le serveur le reçoit aussi en paramètre, et il ne change pas tout au long de la connexion)


Message édité par antp le 22-09-2003 à 16:37:03

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 22-09-2003 à 16:39:23    

Excellent!!
 
Merci pour cette réponse précise :)

Reply

Marsh Posté le 22-09-2003 à 16:41:45    

Sinon question purement pratique lié à l'éditeur de Delphi 6.
 
Quand je veux créer une nouvelle procédure je dois mettre manuellement et aux bons endroits la définition de la dite procédure.
 
Il y aurait pas un onglet style "New procedure" ?
 
(bon je sais ca fait beaucoup de question...mais hmm j'ai certainement acquis de mauvais reflexes au boulot avec l'éditeur que l'on a "AppBuilder de PROGRESS" ( et oui je suis sur que ca dit rien à personne ca ;) )

Reply

Marsh Posté le 22-09-2003 à 16:52:09    

Tu mets ta déclaration dans partie interface, dans la définition de la classe (en private ou public) puis tu fais Ctrl+Shift+C et ça l'ajoutera en bas, dans la partie implementation.
Mais ça ne marche pas avec les procédures simples (qui ne sont pas des méthodes d'une classe donc), ni si tu as la version Perso/Standard de Delphi il me semble.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 22-09-2003 à 17:08:16    

antp a écrit :

moi j'utilise ça :
 

Code :
  1. function Encrypt(Value: string): string;
  2. begin
  3. end;
  4. function Decrypt(Value: string): string;
  5. begin
  6. end;


 
je sais pas ce que ça vaut, c'est pas moi qui l'avait fait :D
 


En fait, ç'est un peu limité comme chiffrement  :D .
 
Grouzou, ça depend surtout si le mot de passe doit être stocké seulement pendant l'execution de l'appli (cas 1) ou après la sortie de l'appli (cas 2).
 
Dans le cas 1, il suffit de fabriquer une clé : tu prends un nombre aléatoire (ou par ex. GetTickCount) que tu hash avec du md5 : cela va donner une suite de caractère qui sera la clé pour chiffrer et déchiffre le mot de passe (à conserver donc pendant le déroulement de l'appli)
Après tu chiffre le mot de passe avec cette clé avec un algo de chiffrement quelconque (IDEA par ex cf. lien plus bas), tu as ton mot de passe chiffré, tu peux le déchiffrer en utilisant l'algo inverse. Mais tu n'as peut être pas besoin d'un truc aussi sécurisé  :D  
 
Par contre si tu veux le chiffer sur le client et le déchiffrer sur le serveur ou vice versa. il faut procéder autrement.
 
Le cas 2 est plus compliqué, demande d'authentifier l'utilisateur, mais c'est pas ce dont tu as besoin d'après ce que j'ai compris.
 
Regarde le package suivant http://www.cityinthesky.co.uk/cryptography.html il comprends toutes les fonctions de hashage (MD5,...) et les algo de chiffrement symétriques (chiffrement et déchiffrement avec la même clé, par ex. IDEA), dont tu as besoin ainsi que des exemples.


Message édité par cpdump le 24-09-2003 à 17:16:32
Reply

Marsh Posté le 22-09-2003 à 17:32:30    

cpdump a écrit :


En fait, ç'est un peu limité comme chiffrement  :D .
 


 
bah oui mais bon dans mon cas c'est pour un truc local qui est généralement déjà sauvé dans la config Windows (mot de passe du proxy).


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 24-09-2003 à 16:43:21    

En fait, ll faut évaluer le préjudice potientiel et mettre les moyens en conséquence. Si le préjudice est faible, il n'y a pas besoin de sortir l'artillerie lourde :D  
 
Son avantage qui est aussi sa principale faiblesse c'est que c'est un algorithme sans clé, c'est pratique pour transérer un mot de passe entre client et serveur, mais c'est toujours le même texte chiffré qui passe et il suffit de connaitre l'algo pour trouver le mot de passe.
 
De toute façons la sécurité d'un systeme correspond à la  
sécurité de son maillon le plus faible.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed