当前位置:  开发笔记 > 编程语言 > 正文

计算文件HASH返回不同的值

如何解决《计算文件HASH返回不同的值》经验,为你挑选了1个好方法。

有谁知道,为什么以下代码在某些机器上返回不同的结果?

Private Shared Function ComputeHashValue(ByVal Data As String) As String
    Dim HashAlgorithm As SHA512 = SHA512.Create
    Dim HashValue() As Byte = HashAlgorithm.ComputeHash(Encoding.ASCII.GetBytes(Data))
    ' Looping over the array and ANDing each byte with 0111111
    For i As Integer = 0 To HashValue.Length - 1
        HashValue(i) = HashValue(i) And Convert.ToByte(127)
    Next
    Return Encoding.ASCII.GetString(HashValue)
End Function

Private Shared Function AreByteArraysEqual(ByVal array1 As Byte(), ByVal array2 As Byte()) As Boolean
    If array1.Length <> array2.Length Then Return False
    For i As Integer = 0 To array1.Length - 1
        If array1(i) <> array2(i) Then Return False
    Next
    Return True
End Function

Private Shared Sub SomeMethod()
    Dim t_prvBytes() As Byte = New Byte() {SOME VALUES} 'Previously computed HASH
    Dim t_dllStream As New IO.FileStream("C:\myfile.txt", IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)

    Dim t_reader As New IO.StreamReader(t_dllStream)

    Dim t_dllHash() As Byte = System.Text.Encoding.Unicode.GetBytes(ComputeHashValue(t_reader.ReadToEnd))

    MsgBox(AreByteArraysEqual(t_dllHash, t_prvBytes))

    t_dllStream.Close()
End Function

Jon Skeet.. 7

您不应该通过哈希将哈希转换为文本Encoding.ASCII.它不是 ASCII文本.(它根本不是文本.)您还要对原始文本进行ASCII编码的结果进行哈希处理Encoding.Unicode.为什么?

你在文本和二进制表单之间进行各种转换 - 你可能不应该做任何事情.只需散列二进制数据(使用HashAlgorithm.ComputeHash(Stream)),并将结果保存为二进制.如果您确实需要将二进制数据转换为文本,请使用Convert.ToBase64String.

此外,您将数据与先前计算的值进行比较 - 但您尚未解释先前计算的值来自何处.



1> Jon Skeet..:

您不应该通过哈希将哈希转换为文本Encoding.ASCII.它不是 ASCII文本.(它根本不是文本.)您还要对原始文本进行ASCII编码的结果进行哈希处理Encoding.Unicode.为什么?

你在文本和二进制表单之间进行各种转换 - 你可能不应该做任何事情.只需散列二进制数据(使用HashAlgorithm.ComputeHash(Stream)),并将结果保存为二进制.如果您确实需要将二进制数据转换为文本,请使用Convert.ToBase64String.

此外,您将数据与先前计算的值进行比较 - 但您尚未解释先前计算的值来自何处.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有