.net 没有文件属性的文件的md5哈希

.net 没有文件属性的文件的md5哈希,.net,sql-server-2005,hash,md5,.net,Sql Server 2005,Hash,Md5,使用以下代码计算文件的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.Cryptograp

使用以下代码计算文件的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数据库中。当我们上传一个文件的同一个实例时,这可以很好地工作。但是,当我们在文件系统上从数据库保存文件的新实例(今天的日期为create/modify)时,然后检查新哈希与数据库中存储的MD5是否匹配,因此重复检查失败


我们如何检查不包括文件属性的文件哈希?或者这里有不同的问题吗?

我怀疑
Me.\u BinaryData
不仅仅是用文件的内容初始化的

最终,散列可以更改的唯一方式是字节数组是否更改


另一种可能是,当您从数据库中持久化/还原文件时,字符集/编码存在差异。

我怀疑
Me.\u BinaryData
不仅仅使用文件的内容进行初始化

最终,散列可以更改的唯一方式是字节数组是否更改


另一种可能是,当您从数据库中持久化/恢复文件时,字符集/编码存在差异。

答案是数组声明的ol'VB问题。大小是上限,而不是长度

Dim _BinaryData As Byte() = New Byte(FileUpload1.PostedFile.InputStream.Length) {}
应该是:

Dim _BinaryData As Byte() = New Byte(FileUpload1.PostedFile.InputStream.Length - 1 ) {}

每个文件的末尾都有一个额外的空字节。

答案是ol'VB数组声明问题。大小是上限,而不是长度

Dim _BinaryData As Byte() = New Byte(FileUpload1.PostedFile.InputStream.Length) {}
应该是:

Dim _BinaryData As Byte() = New Byte(FileUpload1.PostedFile.InputStream.Length - 1 ) {}

每个文件的末尾都有一个额外的空字节。

可能文档正在内部存储修改日期-它是什么类型的文件?我在哪里。\u二进制数据正在初始化?设置为什么?它们是.docx、.pdf、.ppt类型的文件。没什么特别的。上面更新了文件的字节()可能文档在内部存储修改日期-它是什么类型的文件?我在哪里。\u二进制数据正在初始化?设置为什么?它们是.docx、.pdf、.ppt类型的文件。没什么特别的。上面更新了以包含文件的字节()