' Here CRC32 for all my vb.net niggaz ' COPYRIGHT 2010-EOT Erix920 ;) Namespace Cryptography Public Class CRC32 Inherits HashAlgorithm Private Const _DefaultPolynomial As Integer = &HEDB88320 #Region " Member Variables " Private _Table() As Integer Private _CRC32 As Integer = &HFFFFFFFF Private _Polynomial As Integer #End Region #Region " Contructors " Public Sub New() Me.HashSizeValue = 32 ' CRC32 is a 32bit hash _Polynomial = _DefaultPolynomial Initialize() End Sub Public Sub New(ByVal Polynomial As Integer) _Polynomial = Polynomial End Sub #End Region #Region " HashAlgorithm " Protected Overrides Sub HashCore(ByVal array() As Byte, ByVal ibStart As Integer, ByVal cbSize As Integer) Dim intLookup As Integer For i As Integer = 0 To cbSize - 1 intLookup = (_CRC32 And &HFF) Xor array(i) 'This is a workaround for a right bit-shift because vb.net 'does not support unsigned Integers, so _CRC32 >> 8 'gives the wrong value (any better fixes?) _CRC32 = ((_CRC32 And &HFFFFFF00) \ &H100) And &HFFFFFF _CRC32 = _CRC32 Xor _Table(intLookup) Next (i) End Sub Protected Overrides Function HashFinal() As Byte() Return (BitConverter.GetBytes(Not _CRC32)) End Function Public Overrides Sub Initialize() _CRC32 = &HFFFFFFFF _Table = BuildTable(_Polynomial) End Sub #End Region #Region " Helper Methods " ''' ''' Generates the CRC32 Table ''' ''' A polynomial that should be used to generate the table. ''' The CRC32 Table based on the Polynomial given Private Shared Function BuildTable(ByVal Polynomial As Integer) As Integer() Dim Table(255) As Integer Dim Value As Integer For I As Integer = 0 To 255 Value = I For X As Integer = 0 To 7 If (Value And 1) = 1 Then 'This is a workaround for a right bit-shift because vb.net 'does not support unsigned Integers, so _CRC32 >> 1 'gives the wrong value (any better fixes?) Value = Convert.ToInt32(((Value And &HFFFFFFFE) \ 2&) And &H7FFFFFFF) Value = Value Xor Polynomial Else 'Same as above. Value = Convert.ToInt32(((Value And &HFFFFFFFE) \ 2&) And &H7FFFFFFF) End If Next Table(I) = Value Next Return Table End Function #End Region End Class End Namespace