Python Hash MD5 不等于 SQL Server

dap*_*apo 6 python sql-server hash md5

我试图从 Python 3 和 SQL 生成相同的 MD5 代码,但我总是得到不同的结果。

使用此唯一标识符 f033b004-eb80-412d-9773-f4f06bb994c1

SELECT  HASHBYTES('MD5', 'f033b004-eb80-412d-9773-f4f06bb994c1')
Run Code Online (Sandbox Code Playgroud)

结果: 0x9BCE8D23CAC76AF4F61C04673CDD0081

然后我做那个计算

SELECT  ABS(HASHBYTES('MD5', 'f033b004-eb80-412d-9773-f4f06bb994c1')  % 10)
Run Code Online (Sandbox Code Playgroud)

结果: 5

现在使用 python 我使用hashlib

import hashlib

m = hashlib.md5('f033b004-eb80-412d-9773-f4f06bb994c1'.encode() )
m.digest(), m.hexdigest()
Run Code Online (Sandbox Code Playgroud)

结果: b'\x9b\xce\x8d#\xca\xc7j\xf4\xf6\x1c\x04g<\xdd\x00\x81', '9bce8d23cac76af4f61c04673cdd0081'

然后我做同样的计算

    int.from_bytes( b'\x9b\xce\x8d#\xca\xc7j\xf4\xf6\x1c\x04g<\xdd\x00\x81',
                    byteorder='big', 
                    signed=False )%10
Run Code Online (Sandbox Code Playgroud)

结果: 9

有谁知道如何从 Python 代码中获得与 SQL Server 相同的结果?

Luc*_*Luc 0

这是因为 SQL Server 以大写形式返回 MD5 哈希值,而 Python 以小写形式返回 MD5 哈希值。当然,大写和小写字节具有不同的字节值。