• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 745
  • Last Modified:

vb.net crc32 function for files?

Can someone check this module?  It seems to be creating incorrect 32bit file crc's


Imports System.IO
 
Module CRCMOD
    Private crc32Table() As Integer
    Private Const BUFFER_SIZE As Integer = 1024
 
    Public Function CalculateFile(ByVal TheFile As String) As String
        On Error Resume Next
      
 
 
 
 
        Dim Stream As FileStream
        Stream = New FileStream(TheFile, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
 
 
 
        Dim dwPolynomial As Integer = &HEDB88320
        Dim i As Integer, j As Integer
 
        ReDim crc32Table(256)
        Dim dwCrc As Integer
 
        For i = 0 To 255
            dwCrc = i
            For j = 8 To 1 Step -1
                If (dwCrc And 1) Then
                    dwCrc = ((dwCrc And &HFFFFFFFE) \ 2&) And &H7FFFFFFF
                    dwCrc = dwCrc Xor dwPolynomial
                Else
                    dwCrc = ((dwCrc And &HFFFFFFFE) \ 2&) And &H7FFFFFFF
                End If
            Next j
            crc32Table(i) = dwCrc
        Next i
 
 
        Dim crc32Result As Integer
        crc32Result = &HFFFFFFFF
 
        Dim buffer(BUFFER_SIZE) As Byte
        Dim readSize As Integer = BUFFER_SIZE
 
        Dim count As Integer = Stream.Read(buffer, 0, readSize)
 
        Dim iLookup As Integer
        Dim tot As Integer = 0
        Do While (count > 0)
            For i = 0 To count - 1
                iLookup = (crc32Result And &HFF) Xor buffer(i)
                crc32Result = ((crc32Result And &HFFFFFF00) \ &H100) And &HFFFFFF
                crc32Result = crc32Result Xor crc32Table(iLookup)
 
            Next i
            count = Stream.Read(buffer, 0, readSize)
        Loop
 
        CalculateFile = Not (crc32Result)
        CalculateFile = Hex(CalculateFile)
        CalculateFile = UCase(CalculateFile)
 
        Stream.Close()
 
     
 
    End Function
 
 
 
 
 
 
 
 
 
End Module

Open in new window

0
bluedragon99
Asked:
bluedragon99
1 Solution
 
Luis PérezSoftware Architect in .NetCommented:
I always used this class and always worked well. Try it if you want.
Public Class CRC32
    Private crc32Table() As Integer
    Private Const BUFFER_SIZE As Integer = 1024
 
    Public Function GetCrc32(ByRef stream As System.IO.Stream) As Integer
 
        Dim crc32Result As Integer
        crc32Result = &HFFFFFFFF
 
        Dim buffer(BUFFER_SIZE) As Byte
        Dim readSize As Integer = BUFFER_SIZE
 
        Dim count As Integer = stream.Read(buffer, 0, readSize)
        Dim i As Integer
        Dim iLookup As Integer
        Dim tot As Integer = 0
        Do While (count > 0)
            For i = 0 To count - 1
                iLookup = (crc32Result And &HFF) Xor buffer(i)
                crc32Result = ((crc32Result And &HFFFFFF00) \ &H100) And
                 &HFFFFFF   ' nasty shr 8 with vb :/
                crc32Result = crc32Result Xor crc32Table(iLookup)
            Next i
            count = stream.Read(buffer, 0, readSize)
        Loop
 
        GetCrc32 = Not (crc32Result)
 
    End Function
 
    Public Sub New()
        ' This is the official polynomial used by CRC32 in PKZip.
        ' Often the polynomial is shown reversed (04C11DB7).
        Dim dwPolynomial As Integer = &HEDB88320
        Dim i As Integer, j As Integer
 
        ReDim crc32Table(256)
        Dim dwCrc As Integer
 
        For i = 0 To 255
            dwCrc = i
            For j = 8 To 1 Step -1
                If (dwCrc And 1) Then
                    dwCrc = ((dwCrc And &HFFFFFFFE) \ 2&) And &H7FFFFFFF
                    dwCrc = dwCrc Xor dwPolynomial
                Else
                    dwCrc = ((dwCrc And &HFFFFFFFE) \ 2&) And &H7FFFFFFF
                End If
            Next j
            crc32Table(i) = dwCrc
        Next i
    End Sub
 
End Class

Open in new window

0
 
bluedragon99Author Commented:
I had a re-entry problem with my function, after putting it in it's own class and using the dim class as new it works fine.  Thanks
0

Featured Post

Windows Server 2016: All you need to know

Learn about Hyper-V features that increase functionality and usability of Microsoft Windows Server 2016. Also, throughout this eBook, you’ll find some basic PowerShell examples that will help you leverage the scripts in your environments!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now