【发布时间】:2011-02-13 10:26:23
【问题描述】:
使用以下代码计算文件的 MD5 哈希:
Private _MD5Hash As String
Dim _BinaryData As Byte() = New Byte(FileUpload1.PostedFile.InputStream.Length) {}
FileUpload1.PostedFile.InputStream.Read(_BinaryData, 0, _BinaryData.Length)
Dim md5 As New System.Security.Cryptography.MD5CryptoServiceProvider
Dim md5hash() As Byte
md5hash = md5.ComputeHash(Me._BinaryData)
Me._MD5Hash = ByteArrayToString(md5hash)
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
根据文件的创建日期和修改日期,我们得到不同的哈希值。我们将哈希和二进制文件存储在 SQL DB 中。当我们上传相同的文件实例时,这可以正常工作。但是,当我们在文件系统上从数据库中保存文件的新实例(以今天的日期作为创建/修改日期)然后检查新哈希与存储在数据库中的 MD5 时,它们不匹配,因此失败重复检查。
我们如何检查不包括文件属性的文件哈希?还是这里有其他问题?
【问题讨论】:
-
可能文档内部存储了修改日期——它是什么类型的文件?
-
Me._BinaryData 在哪里初始化?它的设置是什么?
-
它们是 .docx、.pdf、.ppt 类型的文件。没什么太花哨的。
-
在上面更新以包含文件的 byte()
标签: .net sql-server-2005 hash md5