【发布时间】:2019-06-24 23:59:06
【问题描述】:
我正在尝试从 Python 3 和 SQL 生成相同的 MD5 代码,但我总是得到不同的结果。
使用此唯一标识符f033b004-eb80-412d-9773-f4f06bb994c1
SELECT HASHBYTES('MD5', 'f033b004-eb80-412d-9773-f4f06bb994c1')
结果:0x9BCE8D23CAC76AF4F61C04673CDD0081
然后我做那个计算
SELECT ABS(HASHBYTES('MD5', 'f033b004-eb80-412d-9773-f4f06bb994c1') % 10)
结果:5
现在使用 python 我使用 hashlib 库
import hashlib
m = hashlib.md5('f033b004-eb80-412d-9773-f4f06bb994c1'.encode() )
m.digest(), m.hexdigest()
结果: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
结果:9
有谁知道我如何从 Python 代码中获得与 SQL Server 相同的结果?
【问题讨论】:
-
你试过改变字节顺序吗?
-
是的,我这样做了,很抱歉没有写出答案,但它不像 SQL Selver。它返回我 1。
-
在 Python 端,您将
bytes转换为int,并取int的模数。在 SQL Server 上,您将取HASHBYTES的输出模数 - 一个VARBINARY。您确定VARBINARY的模数与转换为整数的值的模数相同吗? -
不,我不确定。但是您知道如何在 Python 3 中检查或正确执行吗?
标签: python sql-server hash md5