Криптографические хеши обеспечивают действительно уникальные результаты?

Я задавался вопросом, возвращают ли md5, sha1 и anothers уникальные значения.

Например, sha1() для test возвраты a94a8fe5ccb19ba61c4c0873d391e987982fbbd3, который является 40 символами долго. Так, sha1 для строк, больше, чем 40 символов, должно быть то же (конечно, оно скремблировано, потому что данный вход может содержать пробелы и специальные символы и т.д.).

Из-за этого, когда мы храним пароли пользователей, они могут вводить или свой старый пароль или некоторых супердолго один, который никто не знает.

Это право, или сделайте эти хеш-алгоритмы обеспечивают действительно уникальные результаты - я совершенно уверен, что это едва возможно.

8
задан BlueRaja - Danny Pflughoeft 17 June 2010 в 15:45
поделиться

5 ответов

(Примечание: вы спрашиваете о функциях хеширования , а не о шифровании ).

По определению, они не могут быть уникальными. Они берут большой вклад и уменьшают его размер. Из этого, очевидно, следует, что они не могут представить всю сжатую информацию. Так что нет, они не дают «по-настоящему уникальных» результатов.

Однако они обеспечивают "стойкость к столкновениям". Т.е. они пытаются показать, что два немного разных данных производят существенно разный хэш.

13
ответ дан 5 December 2019 в 05:44
поделиться

Алгоритмы хеширования никогда не гарантируют другой результат для разных входных данных. Вот почему хеширование всегда используется как одностороннее «шифрование».

Но вы должны быть реалистами, 160-битный алгоритм хеширования может иметь 2 ^ 160 возможных комбинаций, что ... много! (1 с 48 нулями)

1
ответ дан 5 December 2019 в 05:44
поделиться

Это не функции шифрования, а хэширования.

При хэшировании, по определению, две разные строки могут столкнуться (сопоставиться с одним и тем же значением) по тем самым причинам, которые вы упомянули. Но это обычно не имеет значения, потому что:

  1. Криптографические хэши (такие как SHA1) изо всех сил стараются сделать вероятность столкновения для похожих строк (очень, очень) низкой
  2. Вы не можете вывести исходную строку из хэша.

Эти два фактора означают, что вы не можете взять хэш и легко сгенерировать одну из строк, сопоставленных с ним.

1
ответ дан 5 December 2019 в 05:44
поделиться

Алгоритмы хеширования (о которых вы говорите) не дают уникальных результатов. То, что вы имеете в виду, называется Принципом голубятни . Количество входов превышает количество выходов, поэтому несколько входов должны быть сопоставлены с одним и тем же выходом. Вот почему, чем длиннее выходной хэш, тем лучше, потому что меньшее количество входов сопоставляется с выходом.

Шифрование чего-либо должно обеспечивать уникальные результаты, потому что вы можете зашифровать сообщение, расшифровать его и получить то же сообщение.

10
ответ дан 5 December 2019 в 05:44
поделиться

SHA1 - это не алгоритм шифрования, а криптографическая хеш-функция .

Вы правы - поскольку он сопоставляет произвольный длинный ввод с хешем фиксированного размера, могут возникнуть коллизии. Но идея криптографической хеш-функции состоит в том, чтобы сделать невозможным создание таких коллизий «по запросу». Вот почему мы тоже называем их односторонними хэш-функциями .

Цитата (источник) :

Идеальная криптографическая хеш-функция имеет четыре основных или важных свойства:
* легко вычислить хеш-значение для любого данного сообщения,
* невозможно найти сообщение с заданным хешем,
* невозможно изменить сообщение без изменения его хэша,
* невозможно найти два разных сообщения с одинаковым хешем.

4
ответ дан 5 December 2019 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: