Build / check hash value for file

It's hard for me to deal with this. Can anyone point me in the right direction for checking / generating hash codes for the uploaded file, or let me know what I am doing wrong with the code below?

getFileSHA256(softwareUpload.PostedFile) 'Line that calls the function includes a reference to an uploaded file

Private Function getFileSHA256(ByVal theFile As Web.HttpPostedFile) As String
    Dim SHA256CSP As New SHA256Managed()
    Dim byteHash() As Byte = SHA256CSP.ComputeHash(theFile.InputStream)
    Return ByteArrayToString(byteHash)
End Function

Private Function ByteArrayToString(ByVal arrInput() As Byte) As String
    Dim sb As New System.Text.StringBuilder(arrInput.Length * 2)
    For i As Integer = 0 To arrInput.Length - 1
        sb.Append(arrInput(i).ToString("X2"))
    Next
    Return sb.ToString().ToLower
End Function

      

I should add that the function works, but the return does not match the sha256 values ​​of other programs.

EDIT ------

There are two other functions in my code. SHA1 gets the same results as SHA256; the results do not match credible sources.

However, MD5 works as expected.

Private Function getFileSHA1(ByVal theFile As Web.HttpPostedFile) As String
    Dim SHA1CSP As New SHA1CryptoServiceProvider()
    Dim byteHash() As Byte = SHA1CSP.ComputeHash(theFile.InputStream)
    Return ByteArrayToString(byteHash)
End Function

Private Function getFileMd5(ByVal theFile As Web.HttpPostedFile) As String
    Dim Md5CSP As New System.Security.Cryptography.MD5CryptoServiceProvider
    Dim byteHash() As Byte = Md5CSP.ComputeHash(theFile.InputStream)
    Return ByteArrayToString(byteHash)
End Function

      

I plan to consolidate these features as soon as I know they work as expected.

The only difference between the two is that MD5 uses "MD5CryptoServiceProvider" and it works as expected. SHA1 also uses "SHA1CryptoServiceProvider" but does not support trusted sources.

+3


source to share


1 answer


I checked some tests here, seems to SHA256Managed

work fine for text files .

My code is below, I used your implementation ByteArrayToString

:

Sub Main()
  Dim s As New SHA256Managed
  Dim fileBytes() As Byte = IO.File.ReadAllBytes("s:\sha256.txt")
  Dim hash() As Byte = s.ComputeHash(fileBytes)

  Dim referenceHash As String = "18ffd9682c5535a2b2798ca51b13e9490df326f185a83fe6e059f8ff47d92105"
  Dim calculatedHash As String = ByteArrayToString(hash)
  MsgBox(calculatedHash = referenceHash) 'outputs True
End Sub

Private Function ByteArrayToString(ByVal arrInput() As Byte) As String
  Dim sb As New System.Text.StringBuilder(arrInput.Length * 2)
  For i As Integer = 0 To arrInput.Length - 1
    sb.Append(arrInput(i).ToString("X2"))
  Next
  Return sb.ToString().ToLower
End Function

      

For testing purposes, I created a file sha256.txt

under S:

the following contents:



my test file

      

(no spaces or newline)

I got the hash reference value from here by feeding the same data.

Also check this and this one - the fact that you are getting a mismatch may be platform related and / or your trusted source implementation or the need for an additional conversion step.

+1


source







All Articles