mike mcintyre's

.N e t J o u r n a l

This blog hosted by:
http://blogs.vbcity.com      
  Home :: Syndication  :: Login

DecJanuary 2007Feb
SMTWTFS
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

Archives

Topics

Source Code

Tuesday, January 23, 2007 #

Read about it here: ASP.NET AJAX 1.0 Released

I'm excited.  After creating VB examples for Microsoft Ajax and updating them each time the CTP and RC were changed, I am looking forward to updating my examples with the actual release.  I also have dozens of new examples I would like to create now that Ajax 1.0 is released.

posted @ 12:07 PM

Source Code: How To Compare Two Files using HMACSHA1 with VB.NET or VB2005

How To Compare Two Files using HMACSHA1 with VB.NET or VB2005

This article is similar to the article How To Compare Two Files with VB.NET and VB2005.

The difference is this file comparison article and source code use the .NET System.Security.Cryptography HMACSHA1 Class to compare two files. The suggestion to use HMACSHA1 was made by reader Jim Parzych.

In tests I conducted, the HMACSHA1 class provided better performance than the byte-by-byte comparison in the first article.

The file comparison looks at file paths, file lengths, and file contents. NOTE: While source code for VB.NET is not provided, the code included in this article will work with VB.NET too. Be sure to Import System.IO.

Application Screen Shot

The source code includes a Windows Forms application.


Source Code Excerpt

After a user makes two file selections and clicks the 'Compare Files' button, the CompareFiles function in the source code performs the file comparison.

First CompareFiles compares the path to file one to the path to file two.  If they are the same, file one and file two are the same.

Next, CompareFiles compares the length of file one to the length of file two.  If they are different the files are not equal.

Finally, if file paths are different and the length of file one and file two are the same, CompareFiles compares the contents of file one to file two using hashes created by a HMACSHA1 object. If the bytes in file one are equal to the bytes in file two, the files are equal.

 

 

Private Function CompareFiles(ByVal filePathOne As String, ByVal filePathTwo As String) As Boolean

 

        ' If user has selected the same file as file one and file two..

        If (filePathOne = filePathTwo) Then

            ' Files are the same.

            Me.ResultsRichTextBox.Text = "Files are the same; file one is file two."

            Return True

        End If

 

 

        ' // User selected two different files; Compare length of file one to file two.

        Dim fileOneStream As FileStream

        Dim fileTwoStream As FileStream

 

        ' Open a FileStream for each file.

        fileOneStream = New FileStream(filePathOne, FileMode.Open)

        fileTwoStream = New FileStream(filePathTwo, FileMode.Open)

 

        ' If the files are not the same length...

        If (fileOneStream.Length <> fileTwoStream.Length) Then

            fileOneStream.Close()

            fileTwoStream.Close()

            ' File's are not equal.

            Me.ResultsRichTextBox.Text = "Files are not the same length; they are not equal."

            Return False

        Else

            fileOneStream.Close()

            fileTwoStream.Close()

        End If

 

 

        ' // Files are the same length; compare file contents using .NET HMACSHA1 Class

        Dim fileOneHash As Byte() = ComputeFileHashUsingHMACSHA1(filePathOne)

        Dim fileTwoHash As Byte() = ComputeFileHashUsingHMACSHA1(filePathTwo)

 

        Dim areFilesEqual As Boolean = True

 

        ' Make a byte-by-byte comparrison of file one's hash to file two's hash.

        For i As Integer = 0 To UBound(fileOneHash)

            ' If a byte from file one is not equal to a byte from file two..

            If (fileOneHash(i) <> fileTwoHash(i)) Then

                ' Files are not equal; byte in file one hash <> byte in file two hash.

                Me.ResultsRichTextBox.Text = "Files are not equal; contents are different."

                areFilesEqual = False

                Exit For

            End If

 

        Next

 

        ' // Message user and return areFilesEqual

        If areFilesEqual Then

            ' Files are equal; bytes in file one hash = bytes in file two hash.

            Me.ResultsRichTextBox.Text = "Files are equal; contents are the same."

            areFilesEqual = False

        End If

 

        Return areFilesEqual

 

    End Function

 

    Public Function ComputeFileHashUsingHMACSHA1(ByVal filePath As String) As Byte()

        ' Declare variable named theHMACSHA1 of type HMACSHA1.

        Dim theHMACSHA1 As HMACSHA1

 

        ' Declare variable named theKeyValue of type Byte().

        Dim theKeyValue As Byte()

 

        ' Declare variable named theHashValue of type Byte().

        Dim theHashValue As Byte()

 

        ' Declare variable named theInStream of type Stream.

        Dim theInStream As Stream

 

        ' Call the UnicodeEncoding class' shared GetBytes method to initialize theKeyValue object.

        theKeyValue = (New System.Text.UnicodeEncoding).GetBytes("HashingKey")

 

        ' Call the HMACSHA1 class' constructor method to initialize theKeyValue object.

        theHMACSHA1 = New HMACSHA1(theKeyValue, True)

 

        ' Open theInStream.

        theInStream = New FileStream(filePath, FileMode.Open, FileAccess.Read)

 

        ' Calculate theHashValue.

        theHashValue = theHMACSHA1.ComputeHash(theInStream)

 

        ' Close theInStream.

        theInStream.Close()

 

        ' Return theHashValue.

        Return theHashValue

 

End Function

 

For more information:

FileStream Class

HMACSHA1 Class

mike mcintyre http://www.getdotnetcode.com

posted @ 11:53 AM