<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>BBProject.net &#187; dcpcrypt</title>
	<atom:link href="http://www.bbproject.net/tag/dcpcrypt/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bbproject.net</link>
	<description>Programowanie, webmastering, informatyka</description>
	<lastBuildDate>Tue, 01 Mar 2011 20:35:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Obliczanie sumy kontrolnej MD5 w Delphi</title>
		<link>http://www.bbproject.net/2010/01/obliczanie-sumy-kontrolnej-md5-w-delphi/</link>
		<comments>http://www.bbproject.net/2010/01/obliczanie-sumy-kontrolnej-md5-w-delphi/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 08:43:39 +0000</pubDate>
		<dc:creator>M@ster</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[dcpcrypt]]></category>
		<category><![CDATA[delphi]]></category>
		<category><![CDATA[md5]]></category>
		<category><![CDATA[suma kontrolna]]></category>

		<guid isPermaLink="false">http://www.bbproject.net/?p=40</guid>
		<description><![CDATA[MD5 (z ang. Message-Digest algorithm 5 &#8211; Skrót wiadomości wersja 5) &#8211; algorytm z dziedziny kryptografii. Jest to popularna kryptograficzna funkcja skrótu, która z dowolnego ciągu danych generuje 128-bitowy skrót. Źródło: http://pl.wikipedia.org/wiki/MD5 Język programowania jakim jest Delphi, mimo swojej potęgi nie posiada wbudowanych funkcji do obliczania sum kontrolnych, nawet tak popularnych jak MD5. Nie będę [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>MD5 (z ang. Message-Digest algorithm 5 &#8211; Skrót wiadomości wersja 5) &#8211; algorytm z dziedziny kryptografii. Jest to popularna kryptograficzna funkcja skrótu, która z dowolnego ciągu danych generuje 128-bitowy skrót.</p>
<p>Źródło: <a href="http://pl.wikipedia.org/wiki/MD5">http://pl.wikipedia.org/wiki/MD5</a></p></blockquote>
<p>Język programowania jakim jest Delphi, mimo swojej potęgi nie posiada wbudowanych funkcji do obliczania sum kontrolnych, nawet tak popularnych jak MD5. Nie będę pokazywał jak stworzyć implementację algorytmu MD5 w object pascalu, chociaż jest to możliwe, a zademonstruję jak policzyć sumę kontrolną dowolnego łańcucha z wykorzystaniem pakietu <a href="http://www.cityinthesky.co.uk/cryptography.html">DCPcrypt</a>.</p>
<p><span id="more-40"></span>Pakiet DCPcrypt posiada implementację dla bardzo dużej ilości algorytmów mieszających jak i szyfrujących. W tym wpisie zajmiemy się jego niewielką cząstką w postaci sumy MD5. Pierwsze co musimy zrobić to pobrać ów pakiet, można to zrobić na <a href="http://www.cityinthesky.co.uk/cryptography.html">stronie autora</a> kodu, bądź bezpośrednio <a href="http://www.bbproject.net/wp-content/uploads/2009/11/dcpcrypt2-2009.zip">tutaj</a>. DCPcrypt można zainstalować jako komponent w środowisku Delphi, nie mniej, my ograniczymy się do wypakowania plików i dodania w konfiguracji środowiska ścieżki przeszukiwania bibliotek (<em>Tools</em> &gt; <em>Options</em> &gt; <em>Library &#8211; Win32</em> &gt; <em>Library path</em>). Operację tę przeprowadzamy dla głównego folderu pakietu oraz podfolderu <em>Hashes</em>.</p>
<p style="text-align: center;"><a href="http://www.bbproject.net/wp-content/uploads/2009/11/delphi_directories.png"><img class="alignnone size-large wp-image-42" title="Turbo Delphi - Directories" src="http://www.bbproject.net/wp-content/uploads/2009/11/delphi_directories-512x341.png" alt="Turbo Delphi - Directories" width="512" height="341" /></a></p>
<p style="text-align: left;">Po wstępnej konfiguracji możemy przejść do napisania pożądanej funkcji. W pierwszej kolejności dodajemy do listy używanych bibliotek (<em>uses</em>) moduł <em>DCPmd5</em>.</p>
<pre class="brush: delphi">uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DCPmd5;</pre>
<p>Kolejno deklarujemy funkcję o nazwie <em>MD5</em>, która przyjmuje 1 parametr wejściowy w postaci ciągu znaków, oraz takowy zwraca &#8211; jego sumę kontrolną.</p>
<pre class="brush: delphi">function MD5(const S: String): String;
var
  i: Byte;
  digest: array[0..15] of Byte;
begin

  with TDCP_md5.Create(nil) do
  begin
    Init;
    Update(S[1], Length(S));
    Final(digest);
    Free;
  end;

  Result := '';
  for i := 0 to Length(digest)-1 do
    Result := Result + IntToHex(digest[i], 2);
  Result := LowerCase(Result);

end;</pre>
<p>Na koniec kilka słów objaśnienia powyższego kodu. Po stworzeniu instancji klasy <em>TDCP_md5</em>, następuje jej inicjacja metodą <em>Init</em>. Metoda <em>Update</em> może być wywoływana dowolną ilość razy i przyjmuje jako parametry bufor ciągu bajtów z którego generowana jest funkcja skrótu, oraz jego długość. W naszym przypadku, podajemy początek ciągu znaków (<em>[1]</em> jest wymagane gdyż zerowym elementem tablicy jakim jest String jest jego długość, co powodowało by błędne obliczenia). Jeśli obliczalibyśmy sumę kontrolną pliku, dobrym zwyczajem jest, aby nie obciążać pamięci, odczytywać fragmentami badany plik oraz obliczać część sumy przy pomocy metody <em>Update</em>. Całościowe odczytanie pliku wymagało by zadeklarowania tyle pamięci RAM ile zajmuje dany plik.</p>
<p>Metoda <em>Final</em> kończy obliczenia i zrzuca sumę w postaci tablicy bajtów. Końcowa pętla przekształca ją do postaci w jakiej jest zwykle używana (np: 0cc1099409f2effa3e09912cda637023 dla ciągu wejściowego bbproject.net).</p>
<p>Jeśli zajedzie potrzeba, powyższy kod bardzo łatwo możemy zmodyfikować na potrzeby choćby sumy SHA-1, lub dowolnej innej obsługiwanej przez DCPcrypt. Dlaczego użyłem akurat tego pakietu, podczas gdy w internecie łatwo znaleźć dziesiątki innych, gotowych implementacji? Powodów jest kilka, po pierwsze szybkość obliczeń, z moich testów wynika iż implementacja wykonana w pakiecie DCPcrypt najszybciej oblicza sumy kontrolne. Drugim powodem jest możliwość cząstkowego obliczania sumy kontrolnej (przydatne przy bardzo dużych plikach). Ilość obsługiwanych algorytmów też nie pozostała bez znaczenia.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bbproject.net/2010/01/obliczanie-sumy-kontrolnej-md5-w-delphi/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

