Datakent Ana Sayfa
Anasayfa Anasayfa > Diğer bölümler > Borland Delphi
  Aktif Konular Aktif Konular RSS: Delphi md5 Kullanımı
  Yardım Yardım  Hızlı Ara   Kayıt Ol Kayıt Ol  Giriş Giriş

Delphi md5 Kullanımı

 Yanıt Yaz Yanıt Yaz
Yazar
Mesaj
Recep Turan Açılır Menü Göster
Moderator Group
Moderator Group
Simge

Kayıt Tarihi: 02.Aralik.2010
Online: Sitede Değil
Gönderilenler: 6
  Alıntı Recep Turan Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Konu: Delphi md5 Kullanımı
    Gönderim Zamanı: 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






Düzenleyen Recep Turan - 05.Nisan.2011 Saat 21:54
Yukarı Dön
 Yanıt Yaz Yanıt Yaz

Forum Atla Forum İzinleri Açılır Menü Göster



Bu Sayfa 0,164 Saniyede Yüklendi. [power by : WebWiz]