Данные, которые хэшируются в вашем коде, представляются в виде байтовой строки, но данные, которые вы sh используете в любом онлайн-инструменте, который вы используете, это ваш .hex()
результат, который представляет собой шестнадцатеричные значения ASCII. Они не одно и то же. Ниже приведено сравнение, которое воспроизводит оба ваших результата:
from binascii import unhexlify
import hashlib
data1 = b'ff815ef617d058df5d16f96a73591e4d12ac358cc113a8c74d8f4ac5843dd921'
data2 = unhexlify(data1)
print(f'{data1=}\n{data2=}')
hashed1 = hashlib.sha256(data1).hexdigest()
hashed2 = hashlib.sha256(data2).hexdigest()
print(f'{hashed1=}\n{hashed2=}')
Вывод:
data1=b'ff815ef617d058df5d16f96a73591e4d12ac358cc113a8c74d8f4ac5843dd921'
data2=b'\xff\x81^\xf6\x17\xd0X\xdf]\x16\xf9jsY\x1eM\x12\xac5\x8c\xc1\x13\xa8\xc7M\x8fJ\xc5\x84=\xd9!'
hashed1='e417268832671b04efa73ba4093572975e084b8b33bfdcb4f9345093f80106ff'
hashed2='56e8d96c55150870ecc84c9a355de617993e21e29c9edcf3caa369b252fd2108'