COMMENT GÉNÉRER UN MOT DE PASSE ALÉATOIRE EN ÉVITANT AU MIEUX LES DOUBLONS ?

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 1 mai 2004 à 09:43
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015 - 7 mai 2004 à 22:21
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/22443-comment-generer-un-mot-de-passe-aleatoire-en-evitant-au-mieux-les-doublons

DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
7 mai 2004 à 22:21
les probabilités de doublon de GUID sont : 1 sur 6,3340286662973277706162286946812e+49

(sachant que l'on a 32 caractères avec 36 possibilités pour chacun)

c'est à dire 36 exposant 32. Ceci explique la quasi-impossibilité de doublon
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
7 mai 2004 à 22:14
Je m'étais amusé (suite à la recherche qu'éffectuait DevelOpeR13
) à faire une fonction sans déclaration de variable (pour m'amuser)

________________

Function CreateGUID:string;
begin
Randomize;
while length(result)<36 do
begin
case random(2) of
0:Result := Result +chr(random(10)+48);
1:Result := Result +chr(random(26)+65);
end;

case length(result) of
8,13,18,23:Result:=Result+'-';
end;
end;
end;
________________


sinon, il y avait aussi (par curiosité):
____________________
(avec ComObj, ActiveX, )

function CreateGuid: string;
var
ID: TGUID;
begin
Result := '';
if CoCreateGuid(ID) = S_OK then
Result := GUIDToString(ID);
end;

____________________
Inekman Messages postés 291 Date d'inscription dimanche 2 février 2003 Statut Membre Dernière intervention 30 juin 2006
2 mai 2004 à 10:49
Voilà qu'en 2 secondes vous démystifiez complètement les CLID à mes yeux :-). Depuis des années, je me suis toujours demandé comment ceux-ci étaient générés et surtout comment ils faisaient pour ne pas être identique à un autre :s .

Je vous remercie tous les deux pour m'avoir éclairé à ce sujet.

ChapeauBonnet bas.

Inekman. 10/10
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
1 mai 2004 à 14:59
Je ne vois absolument pas où il manque une affectation, du moins dans le code que j'ai téléchargé hier.
DevelOpeR13 Messages postés 7 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 4 octobre 2004
1 mai 2004 à 14:16
non je crois qu'il manque un result :='' à la fonction
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
1 mai 2004 à 09:51
Je viens aussi de m'apercevoir que ta routine générait souvent des chaines de caractères identiques. Pour améliorer la sortie, il est préférable de faire une appel à la fonction Randomize comme ceci :
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Randomize;
// Exemple type CLID => FA1BA083-5B86-48F9-9DD3-CF3DA9EEC4F6
Edit1.Text := RandomPassword(8)+'-'+RandomPassword(4)+'-'+RandomPassword(4)+'-'+RandomPassword(4)+'-'+RandomPassword(12);
end;

au lieu de réinitialiser le générateur de nombres aléatoires à chaque série de caractères.
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
1 mai 2004 à 09:43
Pour obtenir un mot de passe unique à coup sur, on peut utiliser les fonctions de créations d'identificateur unique (CLSID) comme ceci :
{ajouter SysUtils à la clause Uses}
procedure TForm1.Button1Click(Sender: TObject);
var
Guid: TGuid;
Password: string;
begin
//Création d'un identificateur unique
CreateGuid(Guid);
//Transformation en une chaine
Password := GuidToString(Guid);
//retire les accolades à chaque bout
Edit1.Text := Copy(Password, 2, Length(Password)-2);
end;

L'utilisation de ce code ne donnera jamais de code identique sur une même machine tout comme sur des milliers d'ordinateurs à travers le monde.

Le plus dur n'est pas de générer un mot de passe mais qu'il soit facile à retenir ! :o(
Rejoignez-nous