Как sha512 может создавать хэши больше, чем строка, с которой он поставляется?

Мне показалось странным, что sha512 может создать строку, намного меньшую, чем та, с которой она поставляется.
Вот пример (в Python):

Python 3.6.0 (default, Jan 13 2017, 00:00:00) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import hashlib
>>> string='-'*10000
>>> hash=hashlib.sha512(string.encode('utf-8'))
>>> hash.hexdigest()
'0d1e23b51e718f4e67c371a16e0f91fefce2802c0b674374e0e0e3309f0e10936a3b96aa0e29d44ad0ba23d0a019f3ff57bfd260b2ed4b6a06c2d343a6dc1800'
>>> len(string)
10000
>>> len(hash.hexdigest())
128

Как можно создать хэш, в 78 раз меньший, чем необработанная строка?

1 ответ

Решение

SHA-256 необратим, поэтому он может быть короче. Но реальный ответ - Google SHA-256 (или другой криптографический хеш) и изучите код. Вот реальный пример хэша. Клуб бутылок имеет более 1000 членов, но имеет только 100 корзин для хранения бутылок. Он просто использует последние 2 цифры идентификатора членства для номера корзины, простой хеш. Это уменьшает бутылку 1000+ до 100 ям.

См. Семейство SHA-2 для получения подробной информации и псевдокода.

Другие вопросы по тегам