我很难用这个。有人可以指出我正确的方向检查/构建上传文件的哈希码,或者告诉我下面的代码我做错了什么?
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”,但它与受信任的源不匹配。
答案 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。