SlideShare a Scribd company logo
1 of 23
 Dosya İndirme (Http, Ftp)
 Klasör ve Dosya Arşivleme İşlemleri
 Ses Dosyaları Oynatma
 Kameradan Görüntü Alma İşlemleri
 Veri Şifreleme Örnekleri (md5, sha1)
 Program Ayarlarını Şifreleme
Delphi 7 ve üzeri sürümlerinde geliştirdiği
özellik sayesinde URL üzerinden indirme işlemi
yapabiliyor ve bu işlemin ilerlemesi izletebiliyor.
Dosya indirme durumunu bir progressbar ile görsel olarak izlemek yada
indirme aşamalarını takip etmek için bu TDownloadURL nesnesinin bir
olayı olan OnDownloadProgress metodu için sunulan hazır metoduda
private olarak declare etmeliyiz.
Ve private bloğuna aşağıda ki kod satırını ekliyoruz;
procedure URL_OnDownloadProgress(Sender; TDownLoadURL;Progress,
ProgressMax: Cardinal;StatusCode: TURLDownloadStatus;StatusText: String; var
Cancel: Boolean) ;
Ve implementation altına URL_OnDownloadProgress
prosedürünü şu şekilde oluşturalım;
procedure URL_OnDownloadProgress;
begin
ProgressBar1.Max:= ProgressMax;
ProgressBar1.Position:= Progress;
end;
Formumuza eklediğimiz bir progressbar olduğunu ve adınında
Progressbar1 olduğunu varsayararak, oluşan metodumuz
hazır.
Bir buton ekleyelim ve OnClick olayına şunu yazalım ,
with TDownloadURL.Create(self) do
try
URL:='http://wwww.metincengel.com/dosya.zip'; //Indireceğimiz
dosya URL si
FileName := 'c:dosya.zip';//Nereye ve ne isimde indireceğimizi
belirtiyoruz
OnDownloadProgress :=URL_OnDownloadProgress; // az önce
oluşturduğumuz metodu , OnDownloadProgress olayı tetiklendiğinde
çalışması için atamasını yaptık
ExecuteTarget(nil) ; //İndirme işlemini başlattık.
finally
Free;
end;
end;
Bu bölümde delphi programını kullanarak dosya açma ve
dosyaya kaydetme işlemelerini gerçekleştireceğiz.
Aktif dizini değiştirmek için ;
Chdir(Klasör_Yolu);
Aşağıdaki ki gibi bir kod sayesinde aktif dizin C:WinNtSystem32 olmaktadır.
Bu aşamadan sonra dosyanızı sadece ismini belirterek çalıştırmanız (System32
içerisindeki) mümkün olacaktır.
Procedure TForm1.Button1Click(Sender; Object);
begin
Chdir(‘C:WinNtSystem32’); // Aktif dizini değiştir
end;
Dosyayı kapatmak için;
CloseFile(Dosya_Yolu);
Klasör oluşturmak için kullanılan bir fonksiyondur. Şayet belirtilen
yerde klasörü başarıyla oluşturulursa geriye true
değerini, oluşturmazsa da false değerini döndürecektir.
CreateDir(Klasör_Yolu);
Parametre ile belirtilen yoldaki dosyayı silmek için kullanılan bir fonksiyondur.
Şayet silme işlemi başarılı bir şekilde gerçekleştiyse true değerini, aksi takdirde de
false değerini döndürecektir.
DeleteFile(Dosya_Yolu);
Parametre ile belirtilen yolda klasörün var olup olmadığını kontrol eden
fonksiyondur. Fonksiyondan true değerinin dönmesi, belirtilen yolda o klasörün
var olduğu anlamını taşımaktadır.
DirectoryExists(Klasör_Yolu):
Parametre ile belirtilen sürücü içerisindeki boş alanı öğrenmek için
kullanabileceğiniz bir fonksiyondur. Sürücü numaraları ve değerleri aşağıda
verilmiştir.
DiskFree(Sürücü_Numarası);
Dosyanın oluşturma tarihini hesaplayabilen bir fonksiyondur.
FileAge(Dosya_Yolu);
Tek dosya değilde ( tüm txt uzantılı dosyalar veya vs. vs. ) tüm dosyalar
listelenecek ise yani aynı isme ve özelliğe sahip diğer dosyaların da bulunması
gerekiyorsa bu durumlarda kullanacağınız fonksiyondur.
findNext(Dosya);
Parametresiz kullanılan bu fonksiyon sayesinde aktif çalışılan klasörün yolu
öğrenebilir.
GetCurrentDir;
Parametre ile belirtilen yoldaki klasörü silme için kullanılan bir fonksiyondur.
Dikkat edeceğiniz husus silinecek olan klasörün içinin boş olması gerektiğidir.
RemoveDir(Klasör_Yolu);
Delphi xe5 programını kullanarak bilgisayarınız üzerindeki bir ses dosyasını
dinleyebilirsiniz bunun için aşağıdaki kod satırını yazmanız yeterlidir.
PlaySound('C:WINDOWSMediachimes.wav', 0, SND_ASYNC or
SND_FILENAME or SND_NODEFAULT);
Bu işlem sayesinde delphi xe5 programı kullanılarak
bilgisayarınız üzerinde takılı olan web kameradan görüntü
alabileceksiniz.
function CapOpenDriver : Boolean;
var
Retc : LongInt;
DriverIndex : Integer;
DriverStarted : boolean;
achDeviceName : array [0..80] of Char;
achDeviceVersion : array [0..100] of Char;
achFileName : array [0..255] of Char;
begin
Result := FALSE;
if gCapVideoArea = nil then exit;
Result := TRUE;
// Create the Video Capture Window
ghCapWnd := capCreateCaptureWindow( PChar('KruwoSoft'),
WS_CHILD or WS_VISIBLE, 0, 0,
gCapVideoArea.Width, gCapVideoArea.Height,
gCapVideoArea.Handle, 0);
if ghCapWnd <> 0 then
begin
// Install Status-Callback-Function
retc := capSetCallbackOnStatus(ghCapWnd, LongInt(0));
if retc <> 0 then
begin
retc := capSetCallbackOnStatus(ghCapWnd, LongInt(@StatusCallbackProc));
if retc <> 0 then
begin
// Open Installed Video Driver
DriverIndex := 0;
repeat
DriverStarted := CapInitDriver( DriverIndex );
if NOT DriverStarted then DriverIndex := DriverIndex + 1;
until (DriverStarted = TRUE) OR (DriverIndex >= MAXVIDDRIVERS);
// Keep Name of Video Driver
if capGetDriverDescription( DriverIndex,
achDeviceName, 80,
achDeviceVersion, 100 ) then
begin
gCapVideoDriverName := string(achDeviceName);
end;
// Set Capture FileName
StrPCopy(achFileName, gCapVideoFileName);
retc := capFileSetCaptureFile(ghCapWnd, LongInt(@achFileName));
if retc = 0 then
begin
showmessage(gCapVideoDriverName+': Error in capFileSetCaptureFile');
end;
exit;
end;
Kullanıcı giriş paneli yada benzeri güvenlik gerektiren işlemler yapılırken, kullanıcı
isimlerinin ve şifrelerinin bulunduğu kısım farklı bir yöntemle kendi içinde
şifrelenir bu şekilde dış tehditlere karşı korunmuş olur. Bunun için kullanılan en
sık yöntem ise MD5 kodlamadır.
Şimdi size örnek bir md5 kodlama göstereceğim;
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;
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+ 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
Delphi ileri seviye programlama bölmü 3

More Related Content

Similar to Delphi ileri seviye programlama bölmü 3

Similar to Delphi ileri seviye programlama bölmü 3 (19)

.Net ile yazılım güvenliği
.Net ile yazılım güvenliği.Net ile yazılım güvenliği
.Net ile yazılım güvenliği
 
Mutant Web Applications
Mutant Web ApplicationsMutant Web Applications
Mutant Web Applications
 
PostgreSQL Hem Güçlü Hem Güzel!
PostgreSQL Hem Güçlü Hem Güzel!PostgreSQL Hem Güçlü Hem Güzel!
PostgreSQL Hem Güçlü Hem Güzel!
 
Linux101
Linux101Linux101
Linux101
 
başlıkk 11111
başlıkk 11111başlıkk 11111
başlıkk 11111
 
Holynix v1
Holynix v1Holynix v1
Holynix v1
 
JavaScript sunumu
JavaScript sunumuJavaScript sunumu
JavaScript sunumu
 
PAROLA KIRMA SALDIRILARI
PAROLA KIRMA SALDIRILARIPAROLA KIRMA SALDIRILARI
PAROLA KIRMA SALDIRILARI
 
Oracle Golden Gate
Oracle Golden GateOracle Golden Gate
Oracle Golden Gate
 
Open cv kütüphanesi
Open cv kütüphanesiOpen cv kütüphanesi
Open cv kütüphanesi
 
C#, Microsoft Yaz Okulu 2011 - İzmir
C#, Microsoft Yaz Okulu 2011 - İzmirC#, Microsoft Yaz Okulu 2011 - İzmir
C#, Microsoft Yaz Okulu 2011 - İzmir
 
Jquery Giriş
Jquery GirişJquery Giriş
Jquery Giriş
 
Php1
Php1Php1
Php1
 
Veri işleme üzerine, Hakan Sarıbıyık
Veri işleme üzerine, Hakan SarıbıyıkVeri işleme üzerine, Hakan Sarıbıyık
Veri işleme üzerine, Hakan Sarıbıyık
 
C programlama
C programlamaC programlama
C programlama
 
Chroot içinde {DNS, NTP, Nginx, PHP-FPM}
Chroot içinde {DNS, NTP, Nginx, PHP-FPM}Chroot içinde {DNS, NTP, Nginx, PHP-FPM}
Chroot içinde {DNS, NTP, Nginx, PHP-FPM}
 
Extjs 4 education
Extjs 4 educationExtjs 4 education
Extjs 4 education
 
Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2
Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2
Pig ve Hive ile Hadoop Üzerinde Veri Analizi v2
 
GÜVENLİK SİSTEMLERİNİ ATLATMA
GÜVENLİK SİSTEMLERİNİ ATLATMAGÜVENLİK SİSTEMLERİNİ ATLATMA
GÜVENLİK SİSTEMLERİNİ ATLATMA
 

Delphi ileri seviye programlama bölmü 3

  • 1.
  • 2.  Dosya İndirme (Http, Ftp)  Klasör ve Dosya Arşivleme İşlemleri  Ses Dosyaları Oynatma  Kameradan Görüntü Alma İşlemleri  Veri Şifreleme Örnekleri (md5, sha1)  Program Ayarlarını Şifreleme
  • 3. Delphi 7 ve üzeri sürümlerinde geliştirdiği özellik sayesinde URL üzerinden indirme işlemi yapabiliyor ve bu işlemin ilerlemesi izletebiliyor.
  • 4. Dosya indirme durumunu bir progressbar ile görsel olarak izlemek yada indirme aşamalarını takip etmek için bu TDownloadURL nesnesinin bir olayı olan OnDownloadProgress metodu için sunulan hazır metoduda private olarak declare etmeliyiz. Ve private bloğuna aşağıda ki kod satırını ekliyoruz; procedure URL_OnDownloadProgress(Sender; TDownLoadURL;Progress, ProgressMax: Cardinal;StatusCode: TURLDownloadStatus;StatusText: String; var Cancel: Boolean) ;
  • 5. Ve implementation altına URL_OnDownloadProgress prosedürünü şu şekilde oluşturalım; procedure URL_OnDownloadProgress; begin ProgressBar1.Max:= ProgressMax; ProgressBar1.Position:= Progress; end; Formumuza eklediğimiz bir progressbar olduğunu ve adınında Progressbar1 olduğunu varsayararak, oluşan metodumuz hazır.
  • 6. Bir buton ekleyelim ve OnClick olayına şunu yazalım , with TDownloadURL.Create(self) do try URL:='http://wwww.metincengel.com/dosya.zip'; //Indireceğimiz dosya URL si FileName := 'c:dosya.zip';//Nereye ve ne isimde indireceğimizi belirtiyoruz OnDownloadProgress :=URL_OnDownloadProgress; // az önce oluşturduğumuz metodu , OnDownloadProgress olayı tetiklendiğinde çalışması için atamasını yaptık ExecuteTarget(nil) ; //İndirme işlemini başlattık. finally Free; end; end;
  • 7. Bu bölümde delphi programını kullanarak dosya açma ve dosyaya kaydetme işlemelerini gerçekleştireceğiz.
  • 8. Aktif dizini değiştirmek için ; Chdir(Klasör_Yolu); Aşağıdaki ki gibi bir kod sayesinde aktif dizin C:WinNtSystem32 olmaktadır. Bu aşamadan sonra dosyanızı sadece ismini belirterek çalıştırmanız (System32 içerisindeki) mümkün olacaktır. Procedure TForm1.Button1Click(Sender; Object); begin Chdir(‘C:WinNtSystem32’); // Aktif dizini değiştir end;
  • 9. Dosyayı kapatmak için; CloseFile(Dosya_Yolu); Klasör oluşturmak için kullanılan bir fonksiyondur. Şayet belirtilen yerde klasörü başarıyla oluşturulursa geriye true değerini, oluşturmazsa da false değerini döndürecektir. CreateDir(Klasör_Yolu); Parametre ile belirtilen yoldaki dosyayı silmek için kullanılan bir fonksiyondur. Şayet silme işlemi başarılı bir şekilde gerçekleştiyse true değerini, aksi takdirde de false değerini döndürecektir. DeleteFile(Dosya_Yolu);
  • 10. Parametre ile belirtilen yolda klasörün var olup olmadığını kontrol eden fonksiyondur. Fonksiyondan true değerinin dönmesi, belirtilen yolda o klasörün var olduğu anlamını taşımaktadır. DirectoryExists(Klasör_Yolu): Parametre ile belirtilen sürücü içerisindeki boş alanı öğrenmek için kullanabileceğiniz bir fonksiyondur. Sürücü numaraları ve değerleri aşağıda verilmiştir. DiskFree(Sürücü_Numarası); Dosyanın oluşturma tarihini hesaplayabilen bir fonksiyondur. FileAge(Dosya_Yolu);
  • 11. Tek dosya değilde ( tüm txt uzantılı dosyalar veya vs. vs. ) tüm dosyalar listelenecek ise yani aynı isme ve özelliğe sahip diğer dosyaların da bulunması gerekiyorsa bu durumlarda kullanacağınız fonksiyondur. findNext(Dosya); Parametresiz kullanılan bu fonksiyon sayesinde aktif çalışılan klasörün yolu öğrenebilir. GetCurrentDir; Parametre ile belirtilen yoldaki klasörü silme için kullanılan bir fonksiyondur. Dikkat edeceğiniz husus silinecek olan klasörün içinin boş olması gerektiğidir. RemoveDir(Klasör_Yolu);
  • 12. Delphi xe5 programını kullanarak bilgisayarınız üzerindeki bir ses dosyasını dinleyebilirsiniz bunun için aşağıdaki kod satırını yazmanız yeterlidir. PlaySound('C:WINDOWSMediachimes.wav', 0, SND_ASYNC or SND_FILENAME or SND_NODEFAULT);
  • 13. Bu işlem sayesinde delphi xe5 programı kullanılarak bilgisayarınız üzerinde takılı olan web kameradan görüntü alabileceksiniz.
  • 14. function CapOpenDriver : Boolean; var Retc : LongInt; DriverIndex : Integer; DriverStarted : boolean; achDeviceName : array [0..80] of Char; achDeviceVersion : array [0..100] of Char; achFileName : array [0..255] of Char; begin Result := FALSE; if gCapVideoArea = nil then exit; Result := TRUE; // Create the Video Capture Window ghCapWnd := capCreateCaptureWindow( PChar('KruwoSoft'), WS_CHILD or WS_VISIBLE, 0, 0, gCapVideoArea.Width, gCapVideoArea.Height, gCapVideoArea.Handle, 0); if ghCapWnd <> 0 then begin
  • 15. // Install Status-Callback-Function retc := capSetCallbackOnStatus(ghCapWnd, LongInt(0)); if retc <> 0 then begin retc := capSetCallbackOnStatus(ghCapWnd, LongInt(@StatusCallbackProc)); if retc <> 0 then begin // Open Installed Video Driver DriverIndex := 0; repeat DriverStarted := CapInitDriver( DriverIndex ); if NOT DriverStarted then DriverIndex := DriverIndex + 1; until (DriverStarted = TRUE) OR (DriverIndex >= MAXVIDDRIVERS); // Keep Name of Video Driver if capGetDriverDescription( DriverIndex, achDeviceName, 80, achDeviceVersion, 100 ) then begin gCapVideoDriverName := string(achDeviceName); end; // Set Capture FileName StrPCopy(achFileName, gCapVideoFileName); retc := capFileSetCaptureFile(ghCapWnd, LongInt(@achFileName)); if retc = 0 then begin showmessage(gCapVideoDriverName+': Error in capFileSetCaptureFile'); end; exit; end;
  • 16. Kullanıcı giriş paneli yada benzeri güvenlik gerektiren işlemler yapılırken, kullanıcı isimlerinin ve şifrelerinin bulunduğu kısım farklı bir yöntemle kendi içinde şifrelenir bu şekilde dış tehditlere karşı korunmuş olur. Bunun için kullanılan en sık yöntem ise MD5 kodlamadır. Şimdi size örnek bir md5 kodlama göstereceğim;
  • 17. 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;
  • 18. 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;
  • 19. 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;
  • 20. 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;
  • 21. 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);
  • 22. 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