我正在尝试从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相同的结果吗?
答案 0 :(得分:0)
这是因为SQL Server以大写形式返回MD5哈希,以小写形式返回Python。当然,大写和小写字节具有不同的字节值。
答案 1 :(得分:0)
只是遇到了这个问题...问题是,当SQL Server将哈希转换为整数以执行模数运算时,由于十六进制太大,它将无法为您提供正确的整数(请查看此处的最佳答案: Conversion of long Hex string to Integer not working as expected (works in SQL))
另一方面,python可以正确执行转换,因为最大整数大小与内存允许的大小一样