Stocarea parolei

Știu că puteți să salvați parolele în program în fișiere ini, în registru, dar problema este că oricine le poate vedea, există o modalitate mai coordonată de stocare a parolelor?







Am citit acest articol, dar totul nu este corect

Și nu păstrați parole acolo. Păstrați codul hash de parole prin selectarea oricărui algoritm de criptare neechilibrat, cu cheia mai autentică. Acesta este cazul în marea majoritate a sistemelor.

Kesch - în măsura în care știu că majoritatea programelor pot descifra.
Cineva mi-a spus că parolele pot fi stocate într-o bază de date - cum? (Nu am mai lucrat cu baze de date înainte)


știu cum să descifreze.

Nu poate fi descifrat prin definiție
Puteți selecta parola pentru aceasta

Bine, dar atunci puteți fi un exemplu, cum se oferă acest lucru?


> Cineva mi-a spus că parolele pot fi stocate într-o bază de date
>

acesta nu diferă de stocare în registru, initskki etc. din punctul de vedere al accesului. Creați aceeași bază de date pentru parolă. aceasta este numai dacă o mulțime de parole :))

funcția Crypt (s: șir): șir;
începe
# xA0; Rezultat: = s;
# xA0; pentru i: = 0 până la lungime (Rezultat) -1
# xA0; # xA0; dacă ciudat (i) apoi rezultatul [i]: = rezultat [i] xor 5 alt rezultat rezultat [i]: = rezultat [i] xor 2;
se încheie;


AssignFile (f, "parola.txt");
Resetați (f);
Citiți (f, s);
s: = cript (e);
CloseFile (f);
.

Și oricine poate să-mi spună în detaliu cum să creeze o bază de date mică pentru stocarea parolelor și cum să le contorizeze de acolo?

Spuneți-mi, de ce aveți nevoie pentru a stoca parola?

Programul meu ar trebui să fie deschis prin introducerea parolei care va fi dată fiecărui utilizator creat în program. În prezent, aceste parole și numele de utilizatori sunt stocate în ini-fișierul. Dar nu este sigur. De aceea, am nevoie de mai multe metode cardinale pentru stocarea parolelor și a numelor de utilizatori pentru program.

Panteleev Ivan # xA0; (13.08.05 13:11) [14]
Ei bine, de ce păstrați parola pentru asta?

Depozitarea suficientă a hashes

Nu, cred că e încă prea devreme pentru mine. Vreau ca parolele să fie stocate în baza de date.

Dacă este posibil - explicați cum să faceți acest lucru?

Panteleev Ivan # xA0;
Utilizatorul introduce parola "vacă", programul dvs. primește acest cuvânt "vacă" și îl procesează cu o anumită funcție.
Funcție ("vaca")
Funcția se ocupă de cuvântul „vaca“, și produce un rezultat, cum ar fi codul hash - ceva de genul „abcd3452f67sdf“ - acesta este rezultatul pe care îl scrie în fișierul * .ini.

Data viitoare când utilizatorul introduce parola, programul din nou procesează parola cu această funcție, obține rezultatul și îl compară cu citirea din fișierul ini. dacă este același, utilizatorul primește acces.

Deci, face mai convenabil, pentru că Atunci când parola este hash „vacă“ ea „abcd3452f67sdf“ nu va permite utilizatorului să acceseze - de fapt, programul va procesa și a obține o altă valoare hash. Prin urmare, nu este nevoie pentru a ascunde hash - ea de fapt nu dă un atacator - ca parola nu funcționează și ieși din ea parola reală „vaca“ pur si simplu nu va funcționa.






Este convenabil și rapid să se calculeze un hash utilizând algoritmul MD5 - există o funcție "Calculați hash-ul unui șir"

toate împreună kilobyte 20

funcția EnDeCrypt (text const: String): String;
var i: întreg;
începe
# xA0; Rezultat: = text;
# xA0; pentru i: = 1 până la Lungime (text)
# xA0; # xA0; Rezultat [i]: = chr (nu (ord (text [i])));
se încheie;

Vrem # xA0; (13.08.05 20:46) [22]
Ceva pe care nu l-am înțeles cu cache-ul.
Poate cineva are un exemplu mai bun sau nu știu.

Panteleev Ivan # xA0; (08/15/05 1:03) [24]
Esența hashing-ului nu este să stocheze datele (în cazul tău, parola) fie într-o formă deschisă, fie într-o formă criptată. În schimb, datele sunt prelucrate în mod specific printr-o funcție hash care returnează aceeași valoare pentru aceleași date sursă și:
1. pentru a prelua diferite date inițiale la care f-tionul de procesare va reveni la valori identice, este aproape imposibil
2. datele originale nu pot fi restabilite în valoarea returnată

În cazul dvs., trebuie doar să aflați dacă parola introdusă de utilizator este corectă. Pentru a face acest lucru, trebuie să apelați funcția hash (o funcție care procesează date) pentru parola care este introdusă de către utilizator și valoarea pe care aceeași f-TION a revenit la parola corectă, pe care le puteți stoca oriunde în clar. Deci, dacă aceste două valori se potrivesc, atunci utilizatorul a introdus parola corectă.

P.S. Dacă ceva nu este clar, atunci întrebați mai bine ce, și nu renunțați la această metodă.

P.P.S. Cash și Hash sunt lucruri absolut diferite)

P.S. Și ce este Hesh?

Panteleev Ivan # xA0; (Aug 15, 05 10:11) [27]

> Scrie Delphi - nu este posibil să găsiți fișierul md5.dcu

Mmm, ai descărcat md5.pas și ai pus-o în dosarul proiectului?

P.S.
Hash, este Hash, este Hash
Funcția hash este o funcție la intrarea care primește date și are o valoare unică de lungime fixă
Valoarea hash este valoarea returnată de funcția hash


> Și apoi puteți seta lungimea minimă a parolei. De exemplu
> semne 10.

Numărul minim de caractere nu afectează dificultatea de a defini parola, „ascunse“ de XOR (cu excepția cazului în „cracare“ nu ar alege de încercare și eroare, tastați cu tastatura :))

Da, am descărcat, mb5.pas dar nu a schimbat nimic, vseravno vylazin eroare.

2. Stocați totul într-un fișier binar, există, de asemenea, o parolă proksoreny.

Panteleev Ivan # xA0; (08/15/05 16:00) [31]

> Da, am descarcat

Și puneți dosarul cu proiectul?

Și poate instrucțiunea de a face un fișier binar?
Verific parola în Edit ca în felul următor:

dacă Edit1.Text <> "Parola" atunci.

La naiba, cel care a postat această filială în con "Beginners"!

Da, a fost necesar să mutați baza de date. Sau VyhNAPI.

Panteleev Ivan # xA0; (16 august 2005, 1:01) [34]
Aproximativ astfel (numai în loc de parolă puteți salva hash-ul și îl puteți cripta înainte de salvare):
procedura TForm1.SavePassword (_name, pass: string);
var _MM: TMemoryStream; PE: TPassElement;
începe
_MM: = TMemoryStream.Create;
încerca
PE._name: = _ nume;
PE._pass: = trece;
_mm.Write (pe, sizeof (TPassElement));
_mm.SaveToFile (extractfilepath (application.ExeName) + "cheie");
în cele din urmă
_mm.Free;
se încheie;
se încheie;

funcția TForm1.CheckPassword (_name, pass: string): boolean;
var _MM: TMemoryStream; PE: TPassElement;
începe
rezultat: = false;
_MM: = TMemoryStream.Create;
încerca
dacă există fișier (extractfilepath (application.ExeName) + "key"), thenbegin
_mm.LoadFromFile (extractfilepath (application.ExeName) + "cheie");
_mm.Read (pe, sizeof (TPassElement));
dacă (cu litere mici (_name) = mici (pe._name)) și (smallcase (pass) = smallcase (pe._pass))
rezultat: = adevărat;
se încheie;
în cele din urmă
_mm.Free;
se încheie;
se încheie;

utilizați:
dacă CheckPassword (edit1.Text, edit2.Text) atunci

Delphi nu poate găsi TPassElement!

Și loverkeys, de ce? așa că era mai puțin fiabil?

și în termeni de fiabilitate față de hacking: tot ce trebuie să găsiți și să obțineți, este -
dacă (cu litere mici (_name) = mici (pe._name)) și (smallcase (pass) = smallcase (pe._pass))

Ce nu este mai greu să analizăm parola proksorenny.







Articole similare

Trimiteți-le prietenilor: