У меня есть следующая хеш-функция, и мне интересно, есть ли способ вычислить ввод этой функции на основе хешированного значения. заранее спасибо
def hash(message):
key = [0x0f, 0xff, 0x00]
for char in message:
n = ord(char)
key[0] ^= n
key[1] &= n
key[2] |= n
return + chr(key[0]) + chr(key[1]) + chr(key[2])
В терминах второго предварительного изображения хэш-функции; для любой хэш-функции существует бесконечно много решений, если у вас достаточно времени и денег.
Теперь, предполагая, что у вас было время и деньги, вы создали все возможные предварительные изображения заданного хэш-значения до n-бит и сказали, что у нас есть x решений.
for i in space(1..2^n)
check hash(i) == TheHash
Даже x = 2, злоумышленник не сможет определить реальное предварительное изображение, которое выводило хэш. Однако имейте в виду, что с момента атаки злоумышленник уже нашел x решений, чтобы разбить хэш.
Это возможно, но невозможно получить сообщение из его хеш-значения, за исключением попыток всех возможных сообщений.
Одним словом, нет. Никакая значимая хеш-функция не может применяться в обратном порядке.
Какие хэш-функции делают, так это то, что они пытаются создать "подпись" исходного сообщения. Подпись должна быть достаточно маленькой и обычно используется для проверки или как индекс в каком-либо хранилище.
С этой целью выходной домен должен быть значительно меньше, чем входной домен, или, другими словами, несколько входов могут соответствовать одному и тому же выводу. В вашем случае строки "000"
и "000000000"
будут иметь одно и то же значение хэша, и вы не сможете отличить одно от другого, заданного только хэшем.