Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Delphi ile MD5 Kullanımı
#1
Merhaba arkadaşlar,

Geliştirdiğiniz uygulamalarda güvenlik ve doğrulama ile ilgili kısımlar varsa MD5 kullanmanız gereken durumlar olabilir.


Delphi ile MD5 nasıl kullanabiliriz?
Delphi xe* sürümleri ile md5 kullanmak için "IdHashMessageDigest" sınıfından yararlanabiliriz.

Öncelikle gerekli sınıf için ekleme yapıyoruz;
Kod:
Uses IdHashMessageDigest;

Kullanım :
Kod:
procedure TForm1.Button1Click(Sender: TObject);
var
md5 : TIdHashMessageDigest5;
begin
md5 := TIdHashMessageDigest5.Create;
try
   ShowMessage('Girdiğiniz içeriğin MD5 Karşılığı : ' + md5.HashStringAsHex(edit1.Text));
finally
 md5.Free;
end;
end;



--------------------------------------------------------------------------

Eğer, Delphi 7 gibi eski bir sürümde kullanmak isterseniz;

Kod:
unit MD5;

interface

type
Dizi= Array of integer;

function MD_5(str: string): string;

implementation

function rhex(num: integer): string;
var
str,hex_chr: string;
j: integer;
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(str: string): Dizi;
var
nblk: integer;
blks: Dizi;
i: integer;
begin
nblk:=((length(str)+8) shr 6)+1;
SetLength(blks,nblk*16);
for i:=0 to nblk*16-1 do blks[i]:=0;
for i:=0 to length(str)-1 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,y: integer): integer;
var
lsw,msw: integer;
begin
lsw:=(x and $FFFF)+(y and $FFFF);
msw:=(x shr 16)+(y shr 16)+(lsw shr 16);
Result:=(msw shl 16) or (lsw and $FFFF);
end;

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

function cmn(q, a, b, x, s, t: integer): integer;
begin
Result:= add(rol(add(add(a, q), add(x, t)), s), b);
end;

function ff(a, b, c, d, x, s, t: integer): integer;
Begin
Result:= cmn((b and c) or ((not b) and d), a, b, x, s, t);
end;

function gg(a, b, c, d, x, s, t: integer): integer;
Begin
Result:= cmn((b and d) or (c and (not d)), a, b, x, s, t);
end;

function hh(a, b, c, d, x, s, t: integer): integer;
Begin
Result:= cmn(b xor c xor d, a, b, x, s, t);
end;

function ii(a, b, c, d, x, s, t: integer): integer;
Begin
Result:= cmn(c xor (b or (not d)), a, b, x, s, t);
end;

function MD_5(str: string): string;
var
x: dizi;
a,b,c,d,olda,oldb,oldc,oldd: integer;
i: integer;
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;

a := ff(a, b, c, d, x[i+ 0], 7 , -680876936);
d := ff(d, a, b, c, x[i+ 1], 12, -389564586);
c := ff(c, d, a, b, x[i+ 2], 17, 606105819);
b := ff(b, c, d, a, x[i+ 3], 22, -1044525330);
a := ff(a, b, c, d, x[i+ 4], 7 , -176418897);
d := ff(d, a, b, c, x[i+ 5], 12, 1200080426);
c := ff(c, d, a, b, x[i+ 6], 17, -1473231341);
b := ff(b, c, d, a, x[i+ 7], 22, -45705983);
a := ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
d := ff(d, a, b, c, x[i+ 9], 12, -1958414417);
c := ff(c, d, a, b, x[i+10], 17, -42063);
b := ff(b, c, d, a, x[i+11], 22, -1990404162);
a := ff(a, b, c, d, x[i+12], 7 , 1804603682);
d := ff(d, a, b, c, x[i+13], 12, -40341101);
c := ff(c, d, a, b, x[i+14], 17, -1502002290);
b := ff(b, c, d, a, x[i+15], 22, 1236535329);

a := gg(a, b, c, d, x[i+ 1], 5 , -165796510);
d := gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
c := gg(c, d, a, b, x[i+11], 14, 643717713);
b := gg(b, c, d, a, x[i+ 0], 20, -373897302);
a := gg(a, b, c, d, x[i+ 5], 5 , -701558691);
d := gg(d, a, b, c, x[i+10], 9 , 38016083);
c := gg(c, d, a, b, x[i+15], 14, -660478335);
b := gg(b, c, d, a, x[i+ 4], 20, -405537848);
a := gg(a, b, c, d, x[i+ 9], 5 , 568446438);
d := gg(d, a, b, c, x[i+14], 9 , -1019803690);
c := gg(c, d, a, b, x[i+ 3], 14, -187363961);
b := gg(b, c, d, a, x[i+ 8], 20, 1163531501);
a := gg(a, b, c, d, x[i+13], 5 , -1444681467);
d := gg(d, a, b, c, x[i+ 2], 9 , -51403784);
c := gg(c, d, a, b, x[i+ 7], 14, 1735328473);
b := gg(b, c, d, a, x[i+12], 20, -1926607734);

a := hh(a, b, c, d, x[i+ 5], 4 , -378558);
d := hh(d, a, b, c, x[i+ 8], 11, -2022574463);
c := hh(c, d, a, b, x[i+11], 16, 1839030562);
b := hh(b, c, d, a, x[i+14], 23, -35309556);
a := hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
d := hh(d, a, b, c, x[i+ 4], 11, 1272893353);
c := hh(c, d, a, b, x[i+ 7], 16, -155497632);
b := hh(b, c, d, a, x[i+10], 23, -1094730640);
a := hh(a, b, c, d, x[i+13], 4 , 681279174);
d := hh(d, a, b, c, x[i+ 0], 11, -358537222);
c := hh(c, d, a, b, x[i+ 3], 16, -722521979);
b := hh(b, c, d, a, x[i+ 6], 23, 76029189);
a := hh(a, b, c, d, x[i+ 9], 4 , -640364487);
d := hh(d, a, b, c, x[i+12], 11, -421815835);
c := hh(c, d, a, b, x[i+15], 16, 530742520);
b := hh(b, c, d, a, x[i+ 2], 23, -995338651);

a := ii(a, b, c, d, x[i+ 0], 6 , -198630844);
d := ii(d, a, b, c, x[i+ 7], 10, 1126891415);
c := ii(c, d, a, b, x[i+14], 15, -1416354905);
b := ii(b, c, d, a, x[i+ 5], 21, -57434055);
a := ii(a, b, c, d, x[i+12], 6 , 1700485571);
d := ii(d, a, b, c, x[i+ 3], 10, -1894986606);
c := ii(c, d, a, b, x[i+10], 15, -1051523);
b := ii(b, c, d, a, x[i+ 1], 21, -2054922799);
a := ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
d := ii(d, a, b, c, x[i+15], 10, -30611744);
c := ii(c, d, a, b, x[i+ 6], 15, -1560198380);
b := ii(b, c, d, a, x[i+13], 21, 1309151649);
a := ii(a, b, c, d, x[i+ 4], 6 , -145523070);
d := ii(d, a, b, c, x[i+11], 10, -1120210379);
c := ii(c, d, a, b, x[i+ 2], 15, 718787259);
b := ii(b, c, d, a, x[i+ 9], 21, -343485551);

a := add(a, olda);
b := add(b, oldb);
c := add(c, oldc);
d := add(d, oldd);

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

end.  

Üstte bulunan kodları kopyala yapıştır ile yeni bir metin belgesine yapıştırıyoruz. Adını Md5.pas yapıp kaydediyoruz.
Kaydettiğimiz dosyayı projemizin klasörüne atıyoruz ve projemizde;

Kod:
Uses md5;

Tanımlamamızdan sonra işlem tamam.


Kullanım:

Kod:
procedure TForm1.Button1Click(Sender: TObject);
begin
edit2.Text := MD_5(edit1.Text);
end;
Cevapla
#2
Alıntı:type

Dizi= Array of integer;



bu kod satirlarinin programa bir etkisi yok, fazlalik.
Bul
Cevapla
#3
Arkadaşlar, 2 yerde hata veriyor sanırım Delphi 7 kullandığım için karşılığınıda bulamadım.


1. Hata

Kod:
begin
  iMax := Trunc( Power( 2, ModulSayisi ) ); // 2'nin Modul sayısı kadar üssü/katı kadar kombinasyon olacak.


[Error] Unit10.pas(219): Undeclared identifier: 'Power'

2.Hata

Kod:
     end;
      LModulAdaylariMD5 := LowerCase( md5indy.HashStringAsHex( LModulAdaylari ) );
     Bulundu := LModulAdaylariMD5 = aSorulacakMDHash;
     if NOT Bulundu then inc(i);
[Error] Unit10.pas(238): Undeclared identifier: 'HashStringAsHex'

Power (üslü sayı üs alma) için math uniti eklenecek. Delphi 7 için md5 fonksiyonu gerekiyor yardımcı olurmusunuz?


Bul
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi ile Skin Administrator 0 4,521 15-12-2015, 20:12
Son Yorum: Administrator
  Program Kendi Kendini Silsin [ Delphi ] Administrator 0 4,289 21-11-2015, 20:40
Son Yorum: Administrator
  Delphi ile masaüstü yolunu alma Administrator 0 4,468 21-11-2015, 12:28
Son Yorum: Administrator
  Delphi ile Formu Gövdeden Sürükleme Administrator 0 4,703 20-11-2015, 09:54
Son Yorum: Administrator
  Program Parametreyle Başlasın [Delphi] Administrator 0 4,247 08-10-2015, 20:16
Son Yorum: Administrator
  Read Buffer & Write Buffer [Delphi] Administrator 0 4,251 02-10-2015, 19:14
Son Yorum: Administrator

Hızlı Menü:


Konuyu Okuyanlar: 2 Ziyaretçi