SHA256 对 Python 和 VB.NET 中的值进行哈希处理会产生不同的哈希值

SHA256 hashing a value in Python and VB.NET produce different hashes

我正在尝试在 Python 中重新实现一个之前在 VB.NET 中编写的哈希函数。该函数接受一个字符串和 returns 散列。然后将哈希存储在数据库中。

Public Function computeHash(ByVal source As String)
            If source = "" Then
                    Return ""
            End If
            Dim sourceBytes = ASCIIEncoding.ASCII.GetBytes(source)
            Dim SHA256Obj As New Security.Cryptography.SHA256CryptoServiceProvider
            Dim byteHash = SHA256Obj.ComputeHash(sourceBytes)
            Dim result As String = ""
            For Each b As Byte In byteHash
                    result += b.ToString("x2")
            Next
            Return result

哪个return 61ba4908431dfec539e7619d472d7910aaac83c3882a54892898cbec2bbdfa8c

我的 Python 重新实现:

def computehash(source):
    if source == "":
        return ""
    m = hashlib.sha256()
    m.update(str(source).encode('ascii'))
    return m.hexdigest()

哪个return e33110e0f494d2cf47700bd204e18f65a48817b9c40113771bf85cc69d04b2d8

相同的十个字符串用作两个函数的输入。

谁能说出函数 return 不同哈希值的原因?

我用了Microsoft's example to create a Visual Basic .Net implementation on TIO。它在功能上等同于您的实现,并且我验证了您的字符串构建器产生与我不熟悉的 VB.

相同的输出

TIO 上的类似 python 3 实现生成与上述 VB 示例相同的散列。

import hashlib
m = hashlib.sha256()
binSrc = "abcdefghij".encode('ascii')
# to verify the bytes
[print("{:2X}".format(c), end="") for c in binSrc]
print()
m.update(binSrc)
print(m.hexdigest()) 

所以我无法重现你的问题。或许,如果您创建了 Minimal, Complete and verifiable example,我们或许可以为您提供更多帮助。