Python Hash MD5 не равен SQL Server - PullRequest
       10

Python Hash MD5 не равен SQL Server

0 голосов
/ 31 января 2019

Я пытаюсь сгенерировать одинаковые коды MD5 из Python 3 и SQL, но я всегда получаю разные результаты.

С этим уникальным идентификатором 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

Теперь с питоном я использую библиотеку 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?

1 Ответ

0 голосов
/ 31 января 2019

Это связано с тем, что сервер SQL возвращает хэш MD5 в верхнем регистре и Python в нижнем регистре.Конечно, байты верхнего и нижнего регистра имеют разные байтовые значения.

...