<?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; suma kontrolna</title>
	<atom:link href="http://www.bbproject.net/tag/suma-kontrolna/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>checksum.me &#8211; projekt jednego dnia</title>
		<link>http://www.bbproject.net/2010/01/checksum-me-projekt-jednego-dnia/</link>
		<comments>http://www.bbproject.net/2010/01/checksum-me-projekt-jednego-dnia/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 07:35:48 +0000</pubDate>
		<dc:creator>M@ster</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[Projekty]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[hash]]></category>
		<category><![CDATA[suma kontrolna]]></category>

		<guid isPermaLink="false">http://www.bbproject.net/?p=173</guid>
		<description><![CDATA[Wymyśliłem/przyjąłem sobie jakiś czas temu termin taki jak „projekt jednego dnia”. Określam nim programy których działający prototyp da się wykonać w jeden dzień. Oczywiście musi to być coś bardziej ambitnego niż „Hello World” &#8211; innymi słowy, użytecznego. Całkiem niedawno postanowiłem zrobić malutkie narzędzie on-line do liczenia sum kontrolnych. Ktoś powie że pełno już takich narzędzi [...]]]></description>
			<content:encoded><![CDATA[<p>Wymyśliłem/przyjąłem sobie jakiś czas temu termin taki jak „projekt jednego dnia”. Określam nim programy których działający prototyp da się wykonać w jeden dzień. Oczywiście musi to być coś bardziej ambitnego niż „Hello World” &#8211; innymi słowy, użytecznego.</p>
<p style="text-align: center;"><a href="http://checksum.me"><img class="size-full wp-image-178 alignnone" title="checksum.me" src="http://www.bbproject.net/wp-content/uploads/2010/01/checksum.me_.png" alt="" width="326" height="43" /></a></p>
<p>Całkiem niedawno postanowiłem zrobić malutkie narzędzie on-line do liczenia <a href="http://pl.wikipedia.org/wiki/Suma_kontrolna">sum kontrolnych</a>. Ktoś powie że pełno już takich narzędzi zrobiono. I faktycznie, ale jeśli bliżej się przyjrzeć, to te działające on-line z reguł ograniczają się tylko do <a href="http://pl.wikipedia.org/wiki/MD5">md5</a> lub bardziej popularnych. Ja poszedłem o krok dalej &#8211; poznajcie <strong><a href="http://checksum.me">checksum.me</a></strong>!</p>
<p><span id="more-173"></span>Czym jest <a href="http://checksum.me">checksum.me</a>? Prostym serwisem obliczającym w locie sumy kontrolne wybranego ciągu znaków. Wszystko dzieje się bez przeładowania strony za pomocą techniki AJAX. Głównym wykonawcą jest funkcją <a href="http://pl.php.net/manual/en/function.hash.php"><em>hash</em></a> języka PHP. I to w zasadzie już wszystko. Prototyp działał już po kilku godzinach a całość, wraz z rejestracją domeny i końcowymi poprawkami zawarłem w jednym dniu z hakiem.</p>
<p style="text-align: center;"><a href="http://www.bbproject.net/wp-content/uploads/2010/01/checksum.me_day1_0.png"><img class="alignnone size-medium wp-image-176" title="checksum.me - dzień pierwszy" src="http://www.bbproject.net/wp-content/uploads/2010/01/checksum.me_day1_0-256x224.png" alt="" width="256" height="224" /></a> <a href="http://www.bbproject.net/wp-content/uploads/2010/01/checksum.me_day1_1.png"><img class="alignnone size-medium wp-image-175" title="checksum.me - dzień pierwszy" src="http://www.bbproject.net/wp-content/uploads/2010/01/checksum.me_day1_1-256x224.png" alt="" width="256" height="224" /></a><br />
<em>Dzień pierwszy &#8211; etapy rozwoju</em></p>
<p>Drugiego dnia dodałem jedynie kilka drobnostek i wprowadziłem drobne poprawki do całości. To co można by dodać w przyszłości to ew. sprawdzanie sum kontrolnych plików.</p>
<p style="text-align: center;"><a href="http://www.bbproject.net/wp-content/uploads/2010/01/checksum.me_day2_0.png"><img class="alignnone size-large wp-image-177" title="checksum.me - dzień drugi" src="http://www.bbproject.net/wp-content/uploads/2010/01/checksum.me_day2_0-512x480.png" alt="" width="512" height="480" /></a><br />
<em>Dzień drugi &#8211; ostatni</em></p>
<p>Oczywiście zdaje sobie sprawę z tego, iż grupa docelowa odbiorców tej mini strony jest dość wąska. Nie mniej, liczę że znajdą się osoby którym się przyda <img src='http://www.bbproject.net/wp-includes/images/smilies/icon_smile.png' alt=':)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bbproject.net/2010/01/checksum-me-projekt-jednego-dnia/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<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>

