1

奇妙な状況が発生しています。次のコードを使用して、小さなファイルの 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

問題は、ファイルが同一であっても、サーバー側で 1 つのハッシュを取得し、クライアント側で別のハッシュを取得することです。クライアントは常に .NET2.0 を使用する WinXP 32 ビットであり、サーバーは .NET4.0 を使用する Win2008 64 ビットです。

ダウンロード プロセスでファイルが変更されていないことを確認するために、サーバーでファイルを圧縮してクライアントで抽出しようとしましたが、それでも同じハッシュの不一致が発生します。

4

1 に答える 1

6
GenerateHash(System.Text.Encoding.UTF8.GetString(md5.Hash)) 

このコードは、ハッシュを UTF8 でエンコードされた文字列として解析しようとします。
ハッシュの大部分は有効な UTF8 ではないため、これは機能しません。

代わりに、バイトを base 64 などの文字列形式にエンコードできます。

于 2013-04-19T15:50:30.793 に答える