我发生了一个奇怪的情况。我使用以下代码为小文件创建MD5哈希。通过比较服务器端的哈希值和客户端的哈希值,我可以测试它是否已经更改,以便我可以下载任何更新的副本。
Public Function MD5Hash(mFileInfo As FileInfo) As String
Dim returnString As String = ""
Try
Dim f As FileStream = New FileStream(mFileInfo.FullName, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
Dim md5 As New System.Security.Cryptography.MD5CryptoServiceProvider()
md5.ComputeHash(f)
returnString = GenerateHash(System.Text.Encoding.UTF8.GetString(md5.Hash))
f.Close()
Catch
'File doesn't exist
End Try
Return returnString
End Function
Public Shared Function GenerateHash(ByVal SourceText As String) As String
'Create an encoding object to ensure the encoding standard for the source text
Dim Ue As New UnicodeEncoding()
'Retrieve a byte array based on the source text
Dim ByteSourceText() As Byte = Ue.GetBytes(SourceText)
'Instantiate an MD5 Provider object
Dim Md5 As New MD5CryptoServiceProvider()
'Compute the hash value from the source
Dim ByteHash() As Byte = Md5.ComputeHash(ByteSourceText)
'And convert it to String format for return
Return Convert.ToBase64String(ByteHash)
End Function
问题在于,在服务器端,我得到一个哈希,在客户端,我得到一个不同的哈希,即使文件是相同的。客户端始终使用.NET2.0的WinXP 32位,服务器是带有.NET4.0的Win2008 64位
我尝试在服务器上压缩文件并在客户端上解压缩以确保文件在下载过程中没有被修改但仍然会出现相同的哈希不匹配。
答案 0 :(得分:6)
GenerateHash(System.Text.Encoding.UTF8.GetString(md5.Hash))
此代码尝试将散列解析为UTF8编码的字符串 由于绝大多数哈希值都不是有效的UTF8,因此无效。
相反,您可以将字节编码为字符串格式,例如base 64。