Protect parola Formular - Delphi și hacker - articol despre Delphi - Personal site

Protejați parola Formular

Aici este a doua cerere este consacrată problemei protecției forma parolei. Din moment ce acest lucru este un astfel de interes, acum încercăm să înțelegem elementele de bază ale acestei protecții. Să discutăm modul în care o vom face. Este logic că înainte de a rula forma pe care vrem să protejăm, este necesar să se solicite utilizatorului o parolă (poți desigur, și o combinație de nume de utilizator - parolă, dar vom lua în considerare exemplul unei parole numai) și pentru a compara valoarea introdusă cu unele rezervată în program (acesta poate fi stocat atât în ​​mod explicit și criptat). În cazul în care valorile se potrivesc, atunci vom deschide formularul necesar, sau de a completa întreaga aplicație.

Să ne întoarcem acum direct forma dezvoltarea unei parole. In timp ce noi dezvolta nimic și nu trebuie să: cea mai simplă versiune a acestui formular consumabile Delphi. Trebuie să selectați File elementul de meniu -> Nou, caseta de dialog, selectați Dialogurile fila, faceți clic pe parola de dialog și faceți clic pe OK. Apare pe ecran gata pentru a forma o solicitare de parolă pentru numele PasswordDlg.

Pe această formă, vor exista două butoane OK și Cancel, un câmp de introducere a textului cu numele parolei parolei, Label1 eticheta pe care scrie Enter Password. Înlocuiți proprietatea Caption Label1 etichetă pe ochi român mai plăcută „Enter Password“. De asemenea, modificați proprietatea Caption pentru forma în sine pe „parolă Solicitare“, de exemplu.

Să acorde o atenție la câmpul de introducere de proprietate PasswordChar Edit este un asterisc (*) - acest lucru înseamnă că, atunci când introduceți toate caracterele vor fi înlocuite cu asteriscuri.

Trebuie să ne asigurăm că formularul de solicitare a parolei apare pe ecran înainte de formularul principal. Acest lucru se face acest lucru. În caz de tratare a formei principale OnShow trebuie să scrie cod de genul:

Acest cod se execută formularul nostru de solicitare a parolei (PasswordDlg) înainte de principal. Și pune la dispoziție sub forma de bază, înainte de a închide formularul prompt parola. Acum, rulați programul, compilatorul vă va întreba dacă doriți să adăugați la utilizările, modulul de a doua formă, desigur, trebuie să răspundă la ceea ce vrei!

În continuare vom proceda după cum urmează. O parolă va fi stocată ca o constantă în cererea noastră. Când introduceți parola corectă va deschide formularul principal, și vom finaliza cererea noastră atunci când introduceți parola greșită, apăsați butonul Cancel, și alte încercări de a închide formularul de anchetă.

Pentru a face acest lucru, scrie un handler pentru evenimente OnFormCloseQuery pentru formularul de solicitare. Aici vom compara conținutul liniei de intrare cu parola noastră constantă, care va fi anunțat în același handler. Astfel, se pare următorul cod:

Procedura TPasswordDlg.FormCloseQuery (Expeditor: TObject;
var CanClose: Boolean);
pass const = 'Wellcome'; // praol nostru
începe
dacă Password.Text = trece apoi CanClose: = true
Application.Terminate altceva;
se încheie;

Așa că ne-am dat seama cel mai simplu mod de a proteja forme. Dacă doriți să comparați parola de caz-insensibil, este necesar pentru a converti ambele siruri de caractere, de exemplu, în caz de jos. Pentru a face acest lucru, trebuie să modificați doar o singură linie:

dacă Password.Text = trece apoi CanClose: = true

ar trebui să fie înlocuit cu:

în cazul în litere mici (Password.Text) = litere mici (trecere), apoi CanClose: = true

Acum vom încerca să protejeze forma unei parole care va fi stocat în formă criptată. Criptați parola în modul cel mai simplu - XOR. Pentru a face acest lucru, scrie o funcție:

funcționează TPasswordDlg.xortext (text: string): string;
cheie var, longkey. șir de caractere;
i. întreg;
toto: char;
începe
cheie: = 'da'; // cheie
pentru i: = 0 până la (lungime (text) div lungime (cheie)) fac
longkey: = longkey + cheie;
pentru i: = 1 până la lungime (text) nu începe
toto: = chr ((ord (text [i]) XOR ord (longkey [i])));
Rezultatul: = rezultat + toto;
se încheie;
se încheie;

Prin numele său funcția va returna un șir criptat este trecut în parametrul text. Nu uitați să declare această funcție în secțiunea Public:

public

Funcția xortext (text: string): string;

De exemplu, ce se va întâmpla în cazul în care această procedură cripta noastră „Welkom“:

Acum schimba handler evenimentului onFormCloseQuery descris în primul exemplu, o astfel de:

Procedura TPasswordDlg.FormCloseQuery (Expeditor: TObject;
var CanClose: Boolean);
var pass: string;
începe
pass: = xortext ( 'Wellcome');

în cazul în care xortext (Password.Text) = trece apoi CanClose: = true
Application.Terminate altceva;
se încheie;

După cum puteți vedea și-a schimbat destul de un pic, iar acum parola într-o formă criptată pot fi stocate, de exemplu, într-un fișier. Deci, a proteja forma :)

Loap, introduceți marcator kakoynit că parola a fost introdusă. De exemplu, există o proprietate de etichete, care într-adevăr nu are nici o informație utilă.

în loc de „PasswordDlg.showmodal;“ scrie ceva de genul

„Dacă eticheta = 0 atunci
începe
PasswordDlg.showmodal;
Inc (Tag);
se încheie; "

acest lucru va asigura punerea în aplicare a acestui cod numai edinazhdy la primul desen forma principală. În continuare, nu va fi numit în mod intenționat, până când nu vă schimbați Tag înapoi la zero.