Test
August 7th, 2007Download a File from the Internet
May 26th, 2007Am avut probleme ceva probleme cu funcţia InternetReadFile în sensul că din diferite motive un fişier de pe internet nu putea fi accesat. Astfel, funcţia îmi bloca întreaga aplicaţie, chiar dacă foloseam thread-uri. În sfârşit am găsit soluţia (care merge pe WinXP cu IE 6, dar s-ar putea să nu meargă pe versiuni mai vechi.
Soluţia este setarea unui timeout pentru conexiune cu:
InternetSetOption(NetHandle, INTERNET_OPTION_RECEIVE_TIMEOUT, @timeout, sizeof(timeout));
Întreaga funcţie e mai jos. Eu nu am nevoie să-mi dea excepţii, d-aia am comentat unele chestii.
function DownloadFile(const url: string): string;
var
NetHandle: HINTERNET;
UrlHandle: HINTERNET;
Buffer: array[0..1024] of Char;
BytesRead: dWord;
timeout: longint;
begin
Result := ”;
NetHandle := InternetOpen(‘Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 1.1.4322)’, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(NetHandle) then
begin
timeout := 10000; // timeout in 10 seconds
InternetSetOption(NetHandle, INTERNET_OPTION_RECEIVE_TIMEOUT, @timeout, sizeof(timeout));
UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
if Assigned(UrlHandle) then // UrlHandle valid? then proceed with download
begin
FillChar(Buffer, SizeOf(Buffer), 0);
repeat
Result := Result + Buffer;
FillChar(Buffer, SizeOf(Buffer), 0);
InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
until BytesRead = 0;
InternetCloseHandle(UrlHandle);
end
else // UrlHandle is not valid raise an exception
//raise Exception.CreateFmt(‘Cannot open URL %s’, [Url]);
Result := ”;
InternetCloseHandle(NetHandle);
end
else // NetHandle is not valid raise an exception
//raise Exception.Create(‘Unable to initialize Wininet!’);
Result := ”;
end;
Coliziuni MD5
March 19th, 2006Ieri am reuşit să produc o coliziune MD5 folosind md5coll.c (http://www.stachliu.com.nyud.net:8090/collisions.html):
unsigned int m0[32] = {
0xc4e44da4, 0xb3dec330, 0×181d7535, 0×1793a5dc,
0x5f711f50, 0×36e6da04, 0xe5360143, 0×7f5f3836,
0×06346d51, 0×40b34c03, 0×865c9c6b, 0×14ba379b,
0xc3a412f0, 0xcefd64f8, 0x3c4339a7, 0×9a9df391,
0×6ebdf279, 0×9994bb54, 0×442af1a7, 0xd71b0968,
0xb84f57d9, 0xfc396508, 0×75eb2cf6, 0×6d3cfdcb,
0×7c33a755, 0×26a2b5bc, 0×981b43f2, 0xbd61cc95,
0xb622fccd, 0×1888196c, 0x655feca7, 0xf8535a73,
};
unsigned int m1[32] = {
0xc4e44da4, 0xb3dec330, 0×181d7535, 0×1793a5dc,
0xdf711f50, 0×36e6da04, 0xe5360143, 0×7f5f3836,
0×06346d51, 0×40b34c03, 0×865c9c6b, 0×14bab79b,
0xc3a412f0, 0xcefd64f8, 0xbc4339a7, 0×9a9df391,
0×6ebdf279, 0×9994bb54, 0×442af1a7, 0xd71b0968,
0x384f57d9, 0xfc396508, 0×75eb2cf6, 0×6d3cfdcb,
0×7c33a755, 0×26a2b5bc, 0×981b43f2, 0xbd614c95,
0xb622fccd, 0×1888196c, 0xe55feca7, 0xf8535a73,
};
Totul a durat aproximativ 12 ore (de joi 17.03.2006 ora 15:24 până vineri 18.03.2006 ora 3:27) pe un laptop Toshiba Satellite Pro cu Celeron Mobile la 1,6MHz si 1024MB RAM, rulând Fedora Core 4 cu gcc 4.0.0 (20050519).


