Hi,
i'm currently working on a app to calculate the crc32 of any filetype. I've found a routine to calculate but the result isn't that what WinZip shows :( . Maybe there's an error in the code? Do you know other routines to calculate the 32-BIT-CRC comfortable from :)?
Here's the actual code:
invoke RtlZeroMemory,addr DateiName,250
invoke GetWindowText,hFileName,addr FileName,250
invoke CreateFile,addr FileName,GENERIC_READ,0,0,OPEN_EXISTING,0,0
mov hFile,eax
invoke GetFileSize,eax,0
mov file_size,eax
invoke GlobalAlloc,GMEM_MOVEABLE or GMEM_ZEROINIT,eax
mov hMemory,eax
invoke GlobalLock,hMemory
mov pMemory,eax
invoke ReadFile,hFile,pMemory,filesize,ADDR bytesread,NULL
invoke CloseHandle,hFile
invoke CRC32,pMemory,file_size
ShowLastError
mov ecx,eax
invoke dwtoa,ecx,addr filebuff
invoke MessageBox,hWin,addr filebuff,ADDR szDisplayName,0
invoke GlobalUnlock,pMemory
invoke GlobalFree,hMemory
InitCRC proc uses ebx esi edi
lea edi, crctab+(255*4)
std
xor edx, edx
dec dl
@@l2: mov eax, edx
mov ebx, 0EDB88320h ; winzip polynom
push 8
pop ecx
@@l1: shr eax, 1
sbb esi, esi
and esi, ebx
xor eax, esi
dec ecx
jnz @@l1
stosd
dec edx
jns @@l2
cld
RET
InitCRC endp
CRC32 proc uses ebx esi edi lpbuffer:DWORD, lsize:DWORD
mov esi, lpbuffer
mov ebx, lsize
xor ecx, ecx
lea eax,
mov edi, 0EDB88320h
@@m1: xor edx, edx
mov dl,
xor dl, al
@@m2: shr edx, 1
jnc @@m3
xor edx, edi
@@m3: inc ecx
and cl, 7
jnz @@m2
shr eax, 8
xor eax, edx
inc esi
dec ebx
jg @@m1
not eax
RET
CRC32 endp
Thanks,
DaEagle99
This message was edited by DaEagle99, on 3/30/2001 7:40:24 AMAre you sure that WinZip takes the CRC of the file?
Could they take the CRC of the compressed file instead?
It would make more sence to do that, so it means that checking the integrity of the .zip can be done by merely calulating the CRC, rather than decompressing, then CRCing.
Mirno
Hi Mirno,
>Are you sure that WinZip takes the CRC of the file?
I think so, cause i've written a crc check in turbo pascal and it matched with the one from WinZip. WinZip calculates the crc of the file decompressed, because when it got extracted, it gets compared with the one of the orginial. So it prevents modifying the files in the zip.
But my question is: Does my code calculate the crc32 of the file correct? And do you know ohter sources to do that? Or can you even send me an example doing that?
thx,
DaEagle99
This message was edited by DaEagle99, on 3/30/2001 9:14:26 AM