3

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

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”,但它与受信任的来源不匹配。

4

1 回答 1

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.txtunder的文件S:,其内容如下:

my test file

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

通过提供相同的数据,我从这里获得了参考哈希值。

还要检查这个这个- 你得到不匹配的事实可能与平台和/或你的可信来源的实现有关,或者需要额外的转换步骤。

于 2013-02-06T01:16:39.557 回答