begin process at 2012 02 07 06:23:37
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité

 > GÉNÉRATEUR DE MOT DE PASSE

GÉNÉRATEUR DE MOT DE PASSE


 Information sur la source

Note :
Aucune note
Catégorie :Sécurité Classé sous :générateur, password, sécurité, aléatoire, mdp Niveau :Débutant Date de création :19/10/2006 Vu / téléchargé :16 249 / 1 259

Auteur : oliverdev

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

--> Générateur de mots de passes
--------------------------------

Cette application permet de générer des mots de passe de
manière aléatoire avec ou sans contraintes.

Pour être clair, il s'agit d'une application pour ceux qui
sont à cours d'idées pour imaginer leurs nouveaux mots de
passe, et non d'un outil pour crackers..

Je ne porte aucune responsabilité sur les conséquences de
l'utilisation de cette application.

Le but est d'illustrer plusieurs principes de programmation
en Delphi, dont:

- l'utilisation du générateur de nombres aléatoires
- la conversion de nombres en chaînes et inversement
- la copie dans le presse-papiers de Windows


--> Olivier

Source

  • unit Unit1;
  • {
  • Générateur de mot de passe.
  • Olivier - Juillet 2006
  • Ce petit programme est réalisé dans le cadre d'un exercice de programmation
  • en Delphi.
  • Il illustre l'emploi du générateur aléatoire, de manipulation de chaînes
  • de caractères, de combinaison de condition logiques, etc.
  • }
  • interface
  • uses
  • Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  • StdCtrls, ComCtrls, IniFiles, Menus, ExtCtrls, jpeg;
  • type
  • TForm1 = class(TForm)
  • GroupBox1: TGroupBox;
  • ChkMin: TCheckBox;
  • ChkMaj: TCheckBox;
  • ChkChiffres: TCheckBox;
  • Label1: TLabel;
  • EdNombre: TEdit;
  • UpDown1: TUpDown;
  • Label2: TLabel;
  • EdPrefixe: TEdit;
  • BtnGenerer: TButton;
  • EdMdP: TEdit;
  • BtnCopier: TButton;
  • Label4: TLabel;
  • MainMenu1: TMainMenu;
  • Fichier1: TMenuItem;
  • Quitter1: TMenuItem;
  • Edition1: TMenuItem;
  • Copier: TMenuItem;
  • BtnEnr: TButton;
  • Label3: TLabel;
  • Enregistrer1: TMenuItem;
  • N1: TMenuItem;
  • SaveDialog1: TSaveDialog;
  • ChkNoRepet: TCheckBox;
  • Aide1: TMenuItem;
  • Apropos1: TMenuItem;
  • ImgLogo1: TImage;
  • procedure BtnGenererClick(Sender: TObject);
  • procedure FormCreate(Sender: TObject);
  • procedure BtnCopierClick(Sender: TObject);
  • procedure EdMdPChange(Sender: TObject);
  • procedure Quitter1Click(Sender: TObject);
  • procedure Enregistrer1Click(Sender: TObject);
  • procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  • procedure Apropos1Click(Sender: TObject);
  • private
  • { Déclarations privées }
  • public
  • { Déclarations publiques }
  • end;
  • var
  • Form1: TForm1;
  • INI: TIniFile;
  • implementation
  • {$R *.DFM}
  • procedure TForm1.FormCreate(Sender: TObject);
  • begin
  • {ouverture du programme}
  • {lecture des paramètres (s'il y en a)
  • On ouvre un fichier de même nom que l'application, mais d'extension .ini
  • S'il n'existe pas, il est ignoré et les options auront
  • des valeurs par défaut}
  • Ini := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
  • ChkMaj.Checked := Ini.ReadBool('Options','Maj', False);
  • ChkMin.Checked := Ini.ReadBool('Options','Min', True);
  • ChkChiffres.Checked := Ini.ReadBool('Options','Chiffres', True);
  • ChkNoRepet.Checked := Ini.ReadBool('Options','NoRepet', False);
  • UpDown1.Position := Ini.ReadInteger('Options','Nombre', 6);
  • EdPrefixe.Text := Ini.ReadString('Options','Prefixe', '');
  • SaveDialog1.FileName := Ini.ReadString('Options','Fichier', '');
  • Ini.Free; {fermeture du fichier INI}
  • Randomize; // Réinitialisation de la suite pseudo-aléatoire
  • end;
  • procedure TForm1.BtnGenererClick(Sender: TObject);
  • {Cette procédure est exécutée par un clic sur le bouton Générer}
  • const
  • TabCarNum = '0123456789'; // tous les chiffres
  • TabCarMin = 'abcdefghijklmnopqrstuvwxyz'; // toutes les lettres minuscules
  • TabCarmaj = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; // toutes les lettres majuscules
  • var
  • Ch: Char;
  • S: string;
  • i, n, l : integer;
  • begin
  • {au départ, on recopie le préfixe obligatoire dans le champ texte
  • qui reçoit le mot de passe}
  • EdMdP.Text := EdPrefixe.Text;
  • n := 0;
  • if UpDown1.Position > 0 then
  • {le nombre de caractères requis est indiqué dans le contrôle UpDown}
  • n := UpDown1.Position;
  • {S est la chaîne de caractères dans laquelle le tirage sera fait
  • Elle est constituée d'une suite de chiffres, de majuscules et de
  • minuscules, selon les options choisies}
  • S := '';
  • if ChkChiffres.Checked then
  • S := S + TabCarNum;
  • if ChkMin.Checked then
  • S := S + TabCarMin;
  • if ChkMaj.Checked then
  • S := S + TabCarMaj;
  • l := Length(S); {longueur de S, pour plage du choix aléatoire}
  • if l = 0 then begin
  • MessageDlg('Veuillez choisir des chiffres et/ou des lettres',
  • mtInformation, [mbOK], 0);
  • exit;
  • end;
  • {on éxécute la boucle de choix aléatoire jusqu'à ce que le champ
  • texte du mot de passe contienne le nombre de caractères voulu}
  • while Length(EdMdP.Text) < n do begin
  • {On choisit un chiffre entre 1 et la longueur de S}
  • i := Round(Random(l+1));
  • {On récupère le caractère situé à cette position dans S}
  • Ch := S[i];
  • if ChkNoRepet.Checked and (n < l) then begin
  • {Si on interdit la répétition, il faut refaire le choix
  • tant que Ch figure déjà dans le mot de passe.
  • ATTENTION: cela n'est logique que si le nombre de caractères
  • demandé pour le mot de passe (n) est inférieur au nombre
  • de caractères constituant S (l); dans le cas contraire,
  • cette option est sans effet}
  • while Pos(Ch, EdMdp.Text) > 0 do begin
  • i := Round(Random(l+1));
  • Ch := S[i];
  • end;
  • end;
  • {enfin, on ajoute le caractère aléatoire directement dans le
  • champ de texte recevant le mot de passe}
  • EdMdP.Text := EdMdP.Text + Ch;
  • end;
  • end;
  • procedure TForm1.EdMdPChange(Sender: TObject);
  • begin
  • {cet événement est généré à chaque changement du contenu du champ
  • texte du mot de passe. On en profite pour rendre accessibles les
  • boutons et commandes de menu nécessaires à l'utilisation du résultat}
  • BtnCopier.Enabled := (Length(EdMdp.Text) > 0);
  • Copier.Enabled := BtnCopier.Enabled;
  • Enregistrer1.Enabled := BtnCopier.Enabled;
  • BtnEnr.Enabled := BtnCopier.Enabled;
  • end;
  • procedure TForm1.BtnCopierClick(Sender: TObject);
  • begin
  • {cette commande envoye le mot de passe dans le presse-papier de Windows
  • equivaut à Edition, Copier}
  • if EdMdP.Text <> '' then begin
  • EdMdP.SelectAll;
  • EdMdP.CopyToClipboard;
  • MessageDlg('Le mot de passe ci-dessus est copié dans le presse-'
  • + 'papiers. Vous pouvez le récupérer par une commande Coller '
  • + 'dans un autre logiciel', mtInformation, [mbOK], 0);
  • end;
  • end;
  • procedure TForm1.Quitter1Click(Sender: TObject);
  • begin
  • Close;
  • end;
  • procedure TForm1.Enregistrer1Click(Sender: TObject);
  • var
  • s, nf: string;
  • f: TextFile;
  • bAppend: boolean;
  • Delim: char;
  • begin
  • {Pour enregistrer le mot de passe en l'associant à un utilisateur}
  • s := '';
  • {Afficher une boîte de dialogue pour demander un nom d'utilisateur}
  • if InputQuery('Enregistrement',
  • 'Associer le mot de passe à l''utilisateur:', s) then begin
  • {Si l'utilisateur a cliqué sur OK, on arrive ici}
  • if s = '' then
  • exit; {chaîne vide, non valable}
  • {Demander dans que fichier (boîte de dialogue standard)}
  • if SaveDialog1.Execute then begin
  • if SaveDialog1.FileName = '' then exit;
  • nf := SaveDialog1.FileName; {nom complet du fichier}
  • {on peut choisir entre CSV et TXT}
  • if LowerCase(ExtractFileExt(nf)) = '.csv' then
  • {en CSV, une virgule comme délimiteur de champs}
  • Delim := ','
  • else
  • {sinon, une tabulation}
  • delim := #9;
  • s := s + Delim + EdMDP.Text;
  • bAppend := False;
  • if FileExists(nf) then
  • {si le fichier choisi existe, on ajoute l'enregistrement
  • à la suite}
  • bAppend := True;
  • AssignFile(F, nf);
  • {$I-}
  • if bAppend then
  • Append(F) {mode ajout}
  • else
  • Rewrite(F); {créer le fichier}
  • {$I+}
  • if IOResult <> 0 then begin
  • MessageDlg('Impossible d''enregistrer dans le fichier '
  • + nf, mtWarning, [mbOK], 0);
  • exit;
  • end;
  • {écriture de la chaîne S dans le fichier}
  • WriteLn(F, S);
  • {fermeture du fichier}
  • CloseFile(F);
  • end;
  • end;
  • end;
  • procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  • begin
  • {fermeture du programme, enregistrement des paramètres}
  • Ini := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
  • try
  • Ini.WriteBool('Options','Maj', ChkMaj.Checked);
  • Ini.WriteBool('Options','Min', ChkMin.Checked);
  • Ini.WriteBool('Options','Chiffres', ChkChiffres.Checked);
  • Ini.WriteBool('Options','NoRepet', ChkNoRepet.Checked);
  • Ini.WriteInteger('Options','Nombre', UpDown1.Position);
  • Ini.WriteString('Options','Prefixe', EdPrefixe.Text);
  • Ini.WriteString('Options','Fichier', SaveDialog1.FileName);
  • finally
  • Ini.Free;
  • end;
  • end;
  • procedure TForm1.Apropos1Click(Sender: TObject);
  • begin
  • MessageDlg
  • ('Programme réalisé en Delphi 5 par Olivier - Juillet 2006'
  • + #13#10 + 'http://ami.informaticien@laposte.net' , mtInformation, [mbOK], 0);
  • end;
  • end.
unit Unit1;

{
Générateur de mot de passe.
Olivier - Juillet 2006
Ce petit programme est réalisé dans le cadre d'un exercice de programmation
en Delphi.
Il illustre l'emploi du générateur aléatoire, de manipulation de chaînes
de caractères, de combinaison de condition logiques, etc.
}

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, IniFiles, Menus, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
	 GroupBox1: TGroupBox;
	 ChkMin: TCheckBox;
	 ChkMaj: TCheckBox;
	 ChkChiffres: TCheckBox;
	 Label1: TLabel;
	 EdNombre: TEdit;
	 UpDown1: TUpDown;
	 Label2: TLabel;
	 EdPrefixe: TEdit;
	 BtnGenerer: TButton;
	 EdMdP: TEdit;
	 BtnCopier: TButton;
	 Label4: TLabel;
	 MainMenu1: TMainMenu;
	 Fichier1: TMenuItem;
	 Quitter1: TMenuItem;
	 Edition1: TMenuItem;
	 Copier: TMenuItem;
	 BtnEnr: TButton;
	 Label3: TLabel;
	 Enregistrer1: TMenuItem;
	 N1: TMenuItem;
	 SaveDialog1: TSaveDialog;
	 ChkNoRepet: TCheckBox;
    Aide1: TMenuItem;
    Apropos1: TMenuItem;
    ImgLogo1: TImage;
	 procedure BtnGenererClick(Sender: TObject);
	 procedure FormCreate(Sender: TObject);
	 procedure BtnCopierClick(Sender: TObject);
	 procedure EdMdPChange(Sender: TObject);
	 procedure Quitter1Click(Sender: TObject);
	 procedure Enregistrer1Click(Sender: TObject);
	 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Apropos1Click(Sender: TObject);
  private
	 { Déclarations privées }
  public
	 { Déclarations publiques }
  end;

var
  Form1: TForm1;
  INI: TIniFile;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
	{ouverture du programme}
	{lecture des paramètres (s'il y en a)
	On ouvre un fichier de même nom que l'application, mais d'extension .ini
	S'il n'existe pas, il est ignoré et les options auront
	des valeurs par défaut}
	Ini := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
	ChkMaj.Checked := Ini.ReadBool('Options','Maj', False);
	ChkMin.Checked := Ini.ReadBool('Options','Min', True);
	ChkChiffres.Checked := Ini.ReadBool('Options','Chiffres', True);
	ChkNoRepet.Checked := Ini.ReadBool('Options','NoRepet', False);
	UpDown1.Position := Ini.ReadInteger('Options','Nombre', 6);
	EdPrefixe.Text := Ini.ReadString('Options','Prefixe', '');
	SaveDialog1.FileName := Ini.ReadString('Options','Fichier', '');
	Ini.Free;	{fermeture du fichier INI}
	Randomize; // Réinitialisation de la suite pseudo-aléatoire
end;

procedure TForm1.BtnGenererClick(Sender: TObject);
{Cette procédure est exécutée par un clic sur le bouton Générer}
const
	TabCarNum = '0123456789';                    // tous les chiffres
	TabCarMin = 'abcdefghijklmnopqrstuvwxyz';    // toutes les lettres minuscules
	TabCarmaj = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';    // toutes les lettres majuscules
var
	Ch: Char;
	S: string;
	i, n, l : integer;
begin
	{au départ, on recopie le préfixe obligatoire dans le champ texte
	 qui reçoit le mot de passe}
	EdMdP.Text := EdPrefixe.Text;
	n := 0;
	if UpDown1.Position > 0 then
		{le nombre de caractères requis est indiqué dans le contrôle UpDown}
		n := UpDown1.Position;
	{S est la chaîne de caractères dans laquelle le tirage sera fait
	Elle est constituée d'une suite de chiffres, de majuscules et de
	minuscules, selon les options choisies}
	S := '';
	if ChkChiffres.Checked then
		S := S + TabCarNum;
	if ChkMin.Checked then
		S := S + TabCarMin;
	if ChkMaj.Checked then
		S := S + TabCarMaj;
	l := Length(S);  {longueur de S, pour plage du choix aléatoire}
	if l = 0 then begin
		MessageDlg('Veuillez choisir des chiffres et/ou des lettres',
     mtInformation, [mbOK], 0);
		exit;
	end;
	{on éxécute la boucle de choix aléatoire jusqu'à ce que le champ
	texte du mot de passe contienne le nombre de caractères voulu}
	while Length(EdMdP.Text) < n do begin
		{On choisit un chiffre entre 1 et la longueur de S}
		i := Round(Random(l+1));
		{On récupère le caractère situé à cette position dans S}
		Ch := S[i];
		if ChkNoRepet.Checked and (n < l) then begin
			{Si on interdit la répétition, il faut refaire le choix
			 tant que Ch figure déjà dans le mot de passe.
			 ATTENTION: cela n'est logique que si le nombre de caractères
			 demandé pour le mot de passe (n) est inférieur au nombre
			 de caractères constituant S (l); dans le cas contraire,
			 cette option est sans effet}
			while Pos(Ch, EdMdp.Text) > 0 do begin
				i := Round(Random(l+1));
				Ch := S[i];
			end;
		end;
		{enfin, on ajoute le caractère aléatoire directement dans le
		champ de texte recevant le mot de passe}
		EdMdP.Text := EdMdP.Text + Ch;
	end;
end;

procedure TForm1.EdMdPChange(Sender: TObject);
begin
	{cet événement est généré à chaque changement du contenu du champ
	texte du mot de passe. On en profite pour rendre accessibles les
	boutons et commandes de menu nécessaires à l'utilisation du résultat}
	BtnCopier.Enabled := (Length(EdMdp.Text) > 0);
	Copier.Enabled := BtnCopier.Enabled;
	Enregistrer1.Enabled := BtnCopier.Enabled;
	BtnEnr.Enabled := BtnCopier.Enabled;
end;

procedure TForm1.BtnCopierClick(Sender: TObject);
begin
	{cette commande envoye le mot de passe dans le presse-papier de Windows
	equivaut à Edition, Copier}
	if EdMdP.Text <> '' then begin
		EdMdP.SelectAll;
		EdMdP.CopyToClipboard;
		MessageDlg('Le mot de passe ci-dessus est copié dans le presse-'
		+ 'papiers. Vous pouvez le récupérer par une commande Coller '
		+ 'dans un autre logiciel', mtInformation, [mbOK], 0);
	end;
end;

procedure TForm1.Quitter1Click(Sender: TObject);
begin
	Close;
end;

procedure TForm1.Enregistrer1Click(Sender: TObject);
var
	s, nf: string;
	f: TextFile;
	bAppend: boolean;
	Delim: char;
begin
	{Pour enregistrer le mot de passe en l'associant à un utilisateur}
	s := '';
	{Afficher une boîte de dialogue pour demander un nom d'utilisateur}
	if InputQuery('Enregistrement',
	'Associer le mot de passe à l''utilisateur:', s) then begin
		{Si l'utilisateur a cliqué sur OK, on arrive ici}
		if s = '' then
			exit; {chaîne vide, non valable}
		{Demander dans que fichier (boîte de dialogue standard)}
		if SaveDialog1.Execute then begin
			if SaveDialog1.FileName = '' then exit;
			nf := SaveDialog1.FileName; {nom complet du fichier}
			{on peut choisir entre CSV et TXT}
			if LowerCase(ExtractFileExt(nf)) = '.csv' then
				{en CSV, une virgule comme délimiteur de champs}
				Delim := ','
			else
				{sinon, une tabulation}
				delim := #9;
			s := s + Delim + EdMDP.Text;
			bAppend := False;
			if FileExists(nf) then
				{si le fichier choisi existe, on ajoute l'enregistrement
				 à la suite}
				bAppend := True;
			AssignFile(F, nf);
			{$I-}
			if bAppend then
				Append(F)   {mode ajout}
			else
				Rewrite(F); {créer le fichier}
			{$I+}
			if IOResult <> 0 then begin
				MessageDlg('Impossible d''enregistrer dans le fichier '
         + nf, mtWarning, [mbOK], 0);
				exit;
			end;
			{écriture de la chaîne S dans le fichier}
			WriteLn(F, S);
			{fermeture du fichier}
			CloseFile(F);
		end;
	end;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
	{fermeture du programme, enregistrement des paramètres}
	Ini := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
	try
	Ini.WriteBool('Options','Maj', ChkMaj.Checked);
	Ini.WriteBool('Options','Min', ChkMin.Checked);
	Ini.WriteBool('Options','Chiffres', ChkChiffres.Checked);
	Ini.WriteBool('Options','NoRepet', ChkNoRepet.Checked);
	Ini.WriteInteger('Options','Nombre', UpDown1.Position);
	Ini.WriteString('Options','Prefixe', EdPrefixe.Text);
	Ini.WriteString('Options','Fichier', SaveDialog1.FileName);
	finally
	Ini.Free;
	end;
end;

procedure TForm1.Apropos1Click(Sender: TObject);
begin
	MessageDlg
  ('Programme réalisé en Delphi 5 par Olivier - Juillet 2006'
	+ #13#10 + 'http://ami.informaticien@laposte.net' , mtInformation, [mbOK], 0);
end;
 end.

 Conclusion

Il est possible avec cette application: de générer des MDP (avec vos préférences), de le copier, de le sauver via le presse papier. Utilisation des fichiers: .ini, .local.

En esperant que ça intéressera certains. A bientôt. Olivier

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • dfm.$$$Télécharger ce fichier [Réservé aux membres club]4 760 octets
  • Lisezmoi.txtTélécharger ce fichier [Réservé aux membres club]Voir ce fichier728 octets
  • MDP_22072006.txtTélécharger ce fichier [Réservé aux membres club]Voir ce fichier21 octets
  • MdPGen.bdsprojTélécharger ce fichier [Réservé aux membres club]8 056 octets
  • MdPGen.bdsproj.localTélécharger ce fichier [Réservé aux membres club]920 octets
  • MdPGen.cfgTélécharger ce fichier [Réservé aux membres club]Voir ce fichier430 octets
  • MdPGen.dprTélécharger ce fichier [Réservé aux membres club]Voir ce fichier266 octets
  • MdPGen.dskTélécharger ce fichier [Réservé aux membres club]4 052 octets
  • MdPGen.identcacheTélécharger ce fichier [Réservé aux membres club]186 octets
  • MdPGen.iniTélécharger ce fichier [Réservé aux membres club]Voir ce fichier154 octets
  • MdPGen.resTélécharger ce fichier [Réservé aux membres club]876 octets
  • Unit1.dcuTélécharger ce fichier [Réservé aux membres club]11 711 octets
  • Unit1.dfmTélécharger ce fichier [Réservé aux membres club]12 498 octets
  • Unit1.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier8 083 octets

Télécharger le zip


 Sources du même auteur

Source avec Zip LISTER LES PROCESSUS SYSTÈMES EN COURS DE FONCTIONNEMENT

 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

 Sources en rapport avec celle ci

Source avec Zip GÉNÉRATEUR DE SUDOKU par jeffem
Source avec Zip Source avec une capture GÉNÉRATEUR DE NOMBRES PSEUDO-ALÉATOIRES par Bacterius
Source avec Zip ALGORITHME BRUTEFORCE: ÉNUMÈRE TOUTE LES POSSIBILITÉS D'UN E... par retaks666
Source avec Zip Source avec une capture GÉNÉRATEUR DE FICHIERS ALÉATOIRES : CLIENT DU SITE : HTTP://... par PoulpHunter
Source avec Zip GÉNÉRER UN MOT DE PASSE ALÉATOIRE par Delphiprog

Commentaires et avis

Commentaire de f0xi le 19/10/2006 14:45:59 administrateur CS

juste un petit truc :


uses Math;

Ch := S[RandomRange(1,l+1)];

Random renvois un entier donc pas besoin de Round et pas besoin non plus d'une variable i pour stocker le nombre aleatoire. c'est pas vraiment utile ici.

de plus Random(l+1) renvois une valeur de 0..l+1 donc il y auras une exception si i = 0
puisqu'un string vas de 1..l, 0 etant logiquement l'octet qui sert a stocker la taille de la chaine quand on transtype en shortstring par exemple et vaut #0 dans le type string.

Commentaire de JulioDelphi le 19/10/2006 15:07:08 administrateur CS

bien sympa, pas de bourdes comme j'aurait pu m'y attendre
sinon c'est quoi ça : "http://ami.informaticien@laposte.net" une adresse intermail ? ^^

Commentaire de cantador le 20/10/2006 19:32:16 administrateur CS

il faut supprimer le dossier "ModelSupport\"  dans unit1

un petit soft sympa et intéressant pour illustrer
quelques fontions même si l'expérience montre
qu'en matière de mot de passe, on utilise plutôt une méthode mnémotechnique qu'une solution aléatoire.

7/10

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

IdHTTPServer login password [ par chasse18 ] J'ai une petite question est-il possible d'integrer dans idhttpserver un login et un password comme sa l'utilisateur fixe se login et mdp et accede a Période du générateur aléatoire de Delphi [ par Adam_01 ] Bonjour,Est-ce que quelqu'un saurait quelle est la période et la dimension du générateur aléatoire utilisé par Delphi pour générer des nombres aléatoi Générateur de note [ par floppy41 ] Bonjour à tous, voici mon probleme, je souhaite créer un générateur de note pour des professeurs (en gros, on entre l'effectif, la moyenne qu'on dési Interdire l'accès à un PC [ par cccm62 ] Bonjour,Mes questions: Je cherche des idées pour bloquer totalement l'accès à un PC sous XP. =&gt; des idées en + que le simple MDP au démarra apparation aléatoire d'une image [ par alaga ] Bonjour !J'aurais besoin d'un peu d'aide ... J'ai élaboré un code pour ma thèse en psycho (les participants doivent résoudre des problèmes) et j'ai be Sécurité [ par tmsource ] Salut tous le monde;Je veut empécher la copie d'une application en delphi d'un PC à un autre;Est ce qu'il y a une méthode pour ce truc;MERCI UAC vista [ par RoOotsy ] Bonjour a tousAlors voila mon problème !Je joue a un jeu en ligne (ragnarok) depuis un compte utilisateur donc non administrateur et L'UAC est activé. comment demander le password et le code utilisateur pour rentrer dans mon application [ par mimichette ] bonsoir tout le monde j'ai fais une table des utilisateurs avc leurs nom, codes et password et j'aimerais que chaque utilisateur entre son pass et son composant générateur d'état de sortie [ par anil16 ] Bonsoir,[^^happy13] J'ai delphi 6 et je cherche un générateur d'état similaire à quickreport mais qui donne une apparence plus belle que celui de del


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,733 sec (3)

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