构建/检查文件的哈希值

时间:2013-02-05 21:53:06

标签: vb.net

我很难用这个。有人可以指出我正确的方向检查/构建上传文件的哈希码,或者告诉我下面的代码我做错了什么?

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

我应该补充说该函数有效,但返回与其他程序的sha256值不匹配。

编辑 ------

我在代码中使用了另外两个函数。 SHA1获得与SHA256相同的结果;结果与受信任的来源不匹配。

但是,MD5按预期工作。

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

一旦我知道他们按预期工作,我计划整合这些功能。

这些之间的唯一区别是MD5正在使用“MD5CryptoServiceProvider”并且它按预期工作。 SHA1也使用“SHA1CryptoServiceProvider”,但它与受信任的源不匹配。

1 个答案:

答案 0 :(得分:1)

我在这里做了一些测试,看来文本文件SHA256Managed 完美无缺

我的代码如下,我使用了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

出于测试目的,我在sha256.txt下创建了一个名为S:的文件,其中包含以下内容:

my test file

(没有尾随空格或换行符)

通过提供相同的数据,我得到了参考哈希值from here

同时检查thisthis - 您不匹配的事实可能与您信任来源的平台和/或实施有关,或需要额外的转化步骤。