Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 43, средняя оценка - 4.84
RNT
Автор FAQ
3134 / 354 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
#1

Нужна хеш-функция для программы на языке С++ - C++

14.06.2010, 22:36. Просмотров 5478. Ответов 11
Метки нет (Все метки)

К моей программе необходимо прикрутить функцию для вычисления хеша. Подскажите, пожалуйста, работоспособный исходник хеш-функции для программы на языке С++.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
15.06.2010, 09:36     Нужна хеш-функция для программы на языке С++ #2
http://ru.wikipedia.org/wiki/Crc#CRC-32
RNT
Автор FAQ
3134 / 354 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
15.06.2010, 14:35  [ТС]     Нужна хеш-функция для программы на языке С++ #3
Цитата Сообщение от Roma_F Посмотреть сообщение
CRC-32 не подходит. Слишком короткая строка получатся. И это не хэш функция.
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,190
Завершенные тесты: 1
15.06.2010, 15:11     Нужна хеш-функция для программы на языке С++ #4
Цитата Сообщение от RNT Посмотреть сообщение
И это не хэш функция.
Да? А что же тогда?
RNT
Автор FAQ
3134 / 354 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
15.06.2010, 18:01  [ТС]     Нужна хеш-функция для программы на языке С++ #5
Цитата Сообщение от Somebody Посмотреть сообщение
Да? А что же тогда?
Контрольная сумма
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,365
15.06.2010, 18:32     Нужна хеш-функция для программы на языке С++ #6
Хорошо, тогда сформулируй, в чем разница между хеш-функцией и контрольной суммой.
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
15.06.2010, 18:55     Нужна хеш-функция для программы на языке С++ #7
RNT, http://ru.wikipedia.org/wiki/Хеширование
RNT
Автор FAQ
3134 / 354 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
16.06.2010, 09:12  [ТС]     Нужна хеш-функция для программы на языке С++ #8
Цитата Сообщение от CheshireCat Посмотреть сообщение
Хорошо, тогда сформулируй, в чем разница между хеш-функцией и контрольной суммой.
Контрольные суммы
Несложные, крайне быстрые и легко реализуемые аппаратные алгоритмы, используемые для защиты от непреднамеренных искажений, в том числе ошибок аппаратуры.

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

Платой за столь высокую скорость является отсутствие криптостойкости — лёгкая возможность подогнать сообщение под заранее известную сумму. Также обычно разрядность контрольных сумм (типичное число: 32 бита) ниже, чем криптографических хешей (типичные числа: 128, 160 и 256 бит), что означает возможность возникновения непреднамеренных коллизий.

Простейшим случаем такого алгоритма является деление сообщения на 32- или 16- битные слова и их суммирование, что применяется, например, в TCP/IP.

Как правило, к такому алгоритму предъявляются требования отслеживания типичных аппаратных ошибок, таких, как несколько подряд идущих ошибочных бит до заданной длины. Семейство алгоритмов т. н. «циклических избыточных кодов» удовлетворяет этим требованиям. К ним относится, например, CRC32, применяемый в аппаратуре Ethernet и в формате упакованных файлов ZIP.

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

* Необратимость: для заданного значения хеш-функции m должно быть вычислительно неосуществимо найти блок данных X, для которого H(X) = m.
* Стойкость к коллизиям первого рода: для заданного сообщения M должно быть вычислительно неосуществимо подобрать другое сообщение N, для которого H(N) = H(M).
* Стойкость к коллизиям второго рода: должно быть вычислительно неосуществимо подобрать пару сообщений ~(M, M'), имеющих одинаковый хеш.

Данные требования не являются независимыми:

* Обратимая функция нестойка к коллизиям первого и второго рода.
* Функция, нестойкая к коллизиям первого рода, нестойка к коллизиям второго рода; обратное неверно.

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

Атака «дней рождения» позволяет находить коллизии для хеш-функции с длиной значений n битов в среднем за примерно 2n / 2 вычислений хеш-функции. Поэтому n-битная хеш-функция считается криптостойкой, если вычислительная сложность нахождения коллизий для неё близка к 2n / 2.

Для криптографических хеш-функций также важно, чтобы при малейшем изменении аргумента значение функции сильно изменялось (лавинный эффект). В частности, значение хеша не должно давать утечки информации даже об отдельных битах аргумента. Это требование является залогом криптостойкости алгоритмов хеширования, хеширующих пользовательский пароль для получения ключа.
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
16.06.2010, 10:24     Нужна хеш-функция для программы на языке С++ #9
RNT, это тоже самое что спорить какой стол подходит для кухни - круглый или обеденный, или какая машина надёжнее - дизельная или хэтчбэк. Ты доказываешь что "криптографическая хеш-функция" это настоящая "хеш-функция", а остальные нет.

"контрольная сумма" = "хеш-сумма". "Криптографические хеш-функции" тоже вычисляют хеш-сумму (или контрольную сумму, или просто "хеш"). А назвали их криптографичискими из-за большей надёжности и стойкости.

Кстати из твоего первого сообщения совершенно непонятно для чего тебе нужна хеш-функция - проверять пароли, файлы или просто для быстрого поиска по ключу.
RNT
Автор FAQ
3134 / 354 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
16.06.2010, 21:40  [ТС]     Нужна хеш-функция для программы на языке С++ #10
Нужна криптографическая хэш-функция.

Цитата Сообщение от Roma_F Посмотреть сообщение
Кстати из твоего первого сообщения совершенно непонятно для чего тебе нужна хеш-функция - проверять пароли, файлы или просто для быстрого поиска по ключу.
Объясню зачем это нужно. Подробнее можно узнать прочитав эту тему . Я нашел интересный способ хранения паролей от любого количества учетных записей при помощи хэш-функции. Минус такого способа в том, что хэш-функция выводит шестнадцатеричный код, который в качестве пароля ненадежен, т.к. используются только 16 разных символов. Я сделал программу, которая разбирает вывод хэш-функции, два подряд идущих символа (т.е. один байт) преобразовает в одну букву алфавита или цифру.
Например, такой результат хэш-функции
e332a76c29654fcb7f6e6b31ced090c7
преобразовывает в такой
6ibhugs3khhi34x2
Длина строки уменьшается в два раза, но зато пароль становится надежным. Поэтому мне нужна криптографическая хэш-функция, способная выдать строку достаточной длины. Связываться с ненадежными контрольными суммами я не хочу т.к. для хранения паролей их не следует использовать.
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
17.06.2010, 00:50     Нужна хеш-функция для программы на языке С++ #11
может это подойдёт
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2010, 18:30     Нужна хеш-функция для программы на языке С++
Еще ссылки по теме:
C++ Функция time(0) для чего тут нужна?
Для чего нужна функция errno_t err? C++
Нужна рекурсивная функция для переворачивания строк C++
C++ Объясните как работает хеш-функция
C++ Нужна работающая реализация хеш-функций ГОСТ - Blake или Blake2

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
RNT
Автор FAQ
3134 / 354 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
17.06.2010, 18:30  [ТС]     Нужна хеш-функция для программы на языке С++ #12
Цитата Сообщение от Roma_F Посмотреть сообщение
может это подойдёт
Не подходит. Нужна криптографическая хэш-функция, а не шифр.
Yandex
Объявления
17.06.2010, 18:30     Нужна хеш-функция для программы на языке С++
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru