Другие языки программирования и технологии
Подскажите по хэш функциям. Объясните, не понимаю.
Подскажите, вот мы решаем задачу по нахождению коллизий в хэш функциях. Т. е ищем произвольную пару X и Y, где H(X)=H(Y), где H-хэш функция. Подскажите, а зачем???? Как мы это на практике используем ???Не понимаю. Спасибо!!!
1. Электронная подпись - это тоже хэш-функция. Имея информацию о коллизиях, можно подменить текст подписанного документа.
2. Частота возникновения коллизий прямо влияет на быстродействие хэширования, которое очень часто используется в программировании. Например, массивы в PHP реализованы именно в виде хэш-таблиц.
2. Частота возникновения коллизий прямо влияет на быстродействие хэширования, которое очень часто используется в программировании. Например, массивы в PHP реализованы именно в виде хэш-таблиц.
Антон Мочалов
А можете по подробней про электронную подпись. Как это так можно подменить имея информацию о коллизиях. Спасибо огромное. У меня выступление в четверг, а этот нюанс не понимаю!
Основная задача - компромисс скорости и минимума коллизий. Эта тема хорошо освещена у Кнута, а понятно разжевана у Седжвика. Объясню сразу на примере. Самый банальный пример - бинарное дерево. Основная характеристика ноды дерева - операция меньше (<). Т. е. мы в поиске элемента в дереве, постоянно опрашиваем ноды на предмет меньше наш ключ, или нет. И соответвенно принимаем решение уйти влево или вправо на ноде. Или же она искома. Но даже не это важно. Важно скорость сравнения. Нам заранее известно, что максимальная скорость сравнения у нас integer(в зависимости разрядности процессора). Она константна, и занимает один такт (O(n)). Возникает проблема, если ключ у нас сложнее, например, дерево у нас хранит данные пользователей, а ключ - имя прользователя. В таком случае, у нас сравнение в худшем случае 2log(средняя длина имени). Это немного, но если пользователей достаточно - то весьма весомо. Поэтому, в большинстве случаев, либо переходят на хеш таблицы, где время поиска близко к O(n), либо заменяю ключ на хеш, что собственно, в большинстве реализаций и есть хеш таблица (утверждение не окончательно, есть и Ъ хеш таблицы).
в большинстве случаев, при строковых или сложных ключах, программист решает задачу легко. Хеш функция - просто сумма байт. Вычисление хеша занимает минимум времени, вставка быстра, но ...Коллизия...
Допустим мы добавляем пользователя "ашот". Суммируем все байты имени, и получаем число - n. Потом, к нам хочет добавится пользватель "тоша". И бах... Сумма байт совпадает. Это и есть коллизия. И поиск вероятности коллизии - это и есть поиск холотой середины, между сложностью реализации и скоростью исполнения.
в большинстве случаев, при строковых или сложных ключах, программист решает задачу легко. Хеш функция - просто сумма байт. Вычисление хеша занимает минимум времени, вставка быстра, но ...Коллизия...
Допустим мы добавляем пользователя "ашот". Суммируем все байты имени, и получаем число - n. Потом, к нам хочет добавится пользватель "тоша". И бах... Сумма байт совпадает. Это и есть коллизия. И поиск вероятности коллизии - это и есть поиск холотой середины, между сложностью реализации и скоростью исполнения.
Похожие вопросы
- Функция родительский контроль в гугл. Хэш-функция?
- подскажите чем виртуальная функция отличается от обычной функции
- ХЭШ, помогите расшифровать
- Как сделать простенький хэш пароля?
- объясните как работает функция pow в библиотеке glibc
- Объясните, что происходит в () функций в c++
- Функции и указатели подскажите
- Люди, подскажите через какой фоторедактор где много функций, лучше редактировать фотографии
- Расшифруйте пожалуйста ХЭШ очень надо!!!
- PHP. Что будет если получить хэш пароля таким образом: echo md5(md5(md5("SUPER_PUPER_PASS_12345"))); Так надежнее? :)