Sayfayı Yazdır | Pencereyi Kapat

Delphi md5 Kullanımı

Nereden Yazdırıldığı: Datakent
Kategori: Diğer bölümler
Forum Adı: Borland Delphi
Forum Tanımlaması: Borland Delphi ile ilgili soru / sorun / paylaşım bölümü
URL: http://forum.datakent.com/forum_posts.asp?TID=2062
Tarih: 28.Nisan.2024 Saat 04:00


Konu: Delphi md5 Kullanımı
Mesajı Yazan: Recep Turan
Konu: Delphi md5 Kullanımı
Mesaj Tarihi: 21.Mart.2011 Saat 17:33
Bu konuda Delphiye yeni başlayanlar için basit yolla md5 kullanımı anlatacağım.

Md5 nedir ?
-Md5  bir doğrulama algoritmasıdır. Verdiğiniz değeri karışık bir algoritmaya sokarak 128-bit 32 haneli olarak size geri döndürür.  Dönen değerin geri dönüşümü yoktur ve aynı metin için her seferinde aynı değer geri döner.

Kullanmak için yapmamız gerekenler;

Öncelikle alttaki Kırmızı kısım (//Md5 Kütüphanesi - //Md5 Kütüphane Kod Sonu)  arasında bulunan kodları kopyalayıp bilgisayarınızda bir yeni bir metin belgesi oluşturun, kodları içine yapıştırıp ve md5.pas olarak kaydedin.

//Md5 Kütüphanesi

unit MD5;

interface

type
Dizi
= Array of integer;

function 
MD_5(strstring): string;

implementation

function rhex(numinteger): string;
var
str,hex_chrstring;
jinteger;
begin
hex_chr
:='0123456789abcdef';
str:='';
for 
j:=0 to 3 do
str:=str+hex_chr[((num shr (j*8+4)) and $F)+1]+hex_chr[((num shr (j*8)) and $F)+1];
Result:=str;
end;

function 
str2blks_MD5(strstring): Dizi;
var
nblkinteger;
blksDizi;
iinteger;
begin
nblk
:=((length(str)+8shr 6)+1;
SetLength(blks,nblk*16);
for 
i:=0 to nblk*16-do blks[i]:=0;
for 
i:=0 to length(str)-do
blks[i shr 2]:=blks[i shr 2] or ((ord(str[i+1]) shl ((i mod 4)*8)));
blks[i shr 2]:=blks[i shr 2] or ($80 shl ((i mod 4)*8));
blks[nblk*16-2]:=length(str)*8;
Result:=blks;
end;

function 
add(x,yinteger): integer;
var
lsw,mswinteger;
begin
lsw
:=(and $FFFF)+(and $FFFF);
msw:=(x shr 16)+(y shr 16)+(lsw shr 16);
Result:=(msw shl 16) or (lsw and $FFFF);
end;

function 
rol(num,cntinteger): integer;
begin
Result
:=(num shl cnt) or (num shr (32 cnt));
end;

function 
cmn(qabxstinteger): integer;
begin
Result
:= add(rol(add(add(aq), add(xt)), s), b);
end;

function 
ff(abcdxstinteger): integer;
Begin
Result
:= cmn((and c) or ((not b) and d), abxst);
end;

function 
gg(abcdxstinteger): integer;
Begin
Result
:= cmn((and d) or (and (not d)), abxst);
end;

function 
hh(abcdxstinteger): integer;
Begin
Result
:= cmn(xor xor dabxst);
end;

function 
ii(abcdxstinteger): integer;
Begin
Result
:= cmn(xor (or (not d)), abxst);
end;

function 
MD_5(strstring): string;
var
xdizi;
a,b,c,d,olda,oldb,oldc,olddinteger;
iinteger;
begin
x
:= str2blks_MD5(str);
a:= 1732584193;
b:= -271733879;
c:= -1732584194;
d:= 271733878;

i:=0;
while 
i<length(x) do
begin
olda 
:= a;
oldb := b;
oldc := c;
oldd := d;

:= ff(abcdx[i0], , -680876936);
:= ff(dabcx[i1], 12, -389564586);
:= ff(cdabx[i2], 17606105819);
:= ff(bcdax[i3], 22, -1044525330);
:= ff(abcdx[i4], , -176418897);
:= ff(dabcx[i5], 121200080426);
:= ff(cdabx[i6], 17, -1473231341);
:= ff(bcdax[i7], 22, -45705983);
:= ff(abcdx[i8], 1770035416);
:= ff(dabcx[i9], 12, -1958414417);
:= ff(cdabx[i+10], 17, -42063);
:= ff(bcdax[i+11], 22, -1990404162);
:= ff(abcdx[i+12], 1804603682);
:= ff(dabcx[i+13], 12, -40341101);
:= ff(cdabx[i+14], 17, -1502002290);
:= ff(bcdax[i+15], 221236535329);

:= gg(abcdx[i1], , -165796510);
:= gg(dabcx[i6], , -1069501632);
:= gg(cdabx[i+11], 14643717713);
:= gg(bcdax[i0], 20, -373897302);
:= gg(abcdx[i5], , -701558691);
:= gg(dabcx[i+10], 38016083);
:= gg(cdabx[i+15], 14, -660478335);
:= gg(bcdax[i4], 20, -405537848);
:= gg(abcdx[i9], 568446438);
:= gg(dabcx[i+14], , -1019803690);
:= gg(cdabx[i3], 14, -187363961);
:= gg(bcdax[i8], 201163531501);
:= gg(abcdx[i+13], , -1444681467);
:= gg(dabcx[i2], , -51403784);
:= gg(cdabx[i7], 141735328473);
:= gg(bcdax[i+12], 20, -1926607734);

:= hh(abcdx[i5], , -378558);
:= hh(dabcx[i8], 11, -2022574463);
:= hh(cdabx[i+11], 161839030562);
:= hh(bcdax[i+14], 23, -35309556);
:= hh(abcdx[i1], , -1530992060);
:= hh(dabcx[i4], 111272893353);
:= hh(cdabx[i7], 16, -155497632);
:= hh(bcdax[i+10], 23, -1094730640);
:= hh(abcdx[i+13], 681279174);
:= hh(dabcx[i0], 11, -358537222);
:= hh(cdabx[i3], 16, -722521979);
:= hh(bcdax[i6], 2376029189);
:= hh(abcdx[i9], , -640364487);
:= hh(dabcx[i+12], 11, -421815835);
:= hh(cdabx[i+15], 16530742520);
:= hh(bcdax[i2], 23, -995338651);

:= ii(abcdx[i0], , -198630844);
:= ii(dabcx[i7], 101126891415);
:= ii(cdabx[i+14], 15, -1416354905);
:= ii(bcdax[i5], 21, -57434055);
:= ii(abcdx[i+12], 1700485571);
:= ii(dabcx[i3], 10, -1894986606);
:= ii(cdabx[i+10], 15, -1051523);
:= ii(bcdax[i1], 21, -2054922799);
:= ii(abcdx[i8], 1873313359);
:= ii(dabcx[i+15], 10, -30611744);
:= ii(cdabx[i6], 15, -1560198380);
:= ii(bcdax[i+13], 211309151649);
:= ii(abcdx[i4], , -145523070);
:= ii(dabcx[i+11], 10, -1120210379);
:= ii(cdabx[i2], 15718787259);
:= ii(bcdax[i9], 21, -343485551);

:= add(aolda);
:= add(boldb);
:= add(coldc);
:= add(doldd);

inc(i,16);
end;
Result:= rhex(a) + rhex(b) + rhex(c) + rhex(d);
end;

end


//Md5 Kütüphane Kod Sonu


== Kullanımı ==

Md5.pas dosyamızı projemizin klasörüne atıyoruz. ( Delphi kütüphanesine de atabilirsiniz )

Formunuza 2 tane edit ve 1 tane button atın.


Uses md5;


procedure TForm1.Button1Click(Sender: TObject);
begin

edit2.Text := MD_5(edit1.Text);   // Edit1'e girdiğim değerin md5 karşılığını edit2'de yaz...
end;


Buton1'e tıkladığınızda edit2'de edit1'deki metnin md5 karşılığını görürsünüz.

Şimdi md5 kontrolü ile doğrulama yapalım.

Kodları Aşağıdaki şekilde yazıyoruz...

procedure TForm1.Button1Click(Sender: TObject);
begin

if (MD_5(edit1.Text) = '21232f297a57a5a743894a0e4a801fc3') and (MD_5(Edit2.text) = 'cfdec2ef38bd45584cc77d71b14efdfb') then // Eğer edit1'e girilen değer "admin" ve edit2'ye girilen değer "datakent" ise
showmessage('Giriş Doğrulandı...' + #13#10 + 'Kullanıcı adı : admin' + #13#10 + 'Şifre : datakent' )
else
showmessage('Kullanıcı adı ya da şifre hatalı!');

end;

Eğer edit1'e ''admin""  edit2'ye ""datakent"" yazıp butona tıklarsanız koddaki md5 ile karşılaştıracak ve md5 karşılığı doğruladıktan sonra girişin başarılı olduğunua dair mesaj verecektir.

21232f297a57a5a743894a0e4a801fc3 = md5 olarak karşılığı "admin"

cfdec2ef38bd45584cc77d71b14efdfb = md5 olarak karşılığı "datakent"

* Md5 doğrulama algoritması büyük küçük harf duyarlıdır... Bu hususa dikkat ediniz.

== Md5 Çözümleme ==

Md5 ile dönen değerden asıl değere ulaşmak imkansızdır ya da imkasıza yakın birşeydir :)  Zaten geri döndürülebilse bir anlamı olmazdı.


Doğrulama işlemini wordlist kullanılabilir. Girdiğiniz md5 değerini şifre listenizdeki
şifrelerle karşılaştıran bir uygulama ile md5 kodunu bir ihtimal decode edebilirsiniz.

Örnek verecek olursak elinizdeki md5 değeri  "17459b9b3e7a90e895cf72b30245abe4" bu olsun.

Listenizdede bulunan değerler şöyle olsun

//
1234
12345
123456
sifre
parola
parolabasak
testmd5
ali
veli
deneme
//

Siz bir döngüye sokup Listenizi bu md5 kodu ile karşılaştırdğınızda "parolabasak" değerine geldiğinide doğrulama olacaktır. Çünkü "17459b9b3e7a90e895cf72b30245abe4" bu deger "parolabasak" kelimesinin md5 degeridir.


Takılan ya da sorun yaşayan olursa bu konu altına yazsın yardımcı olmaya çalışırım...


Dip not : Md5 bir şifreleme algortiması değil doğrulama algoritmasıdır... Smile







Sayfayı Yazdır | Pencereyi Kapat