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

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

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

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

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

К моей программе необходимо прикрутить функцию для вычисления хеша. Подскажите, пожалуйста, работоспособный исходник хеш-функции для программы на языке С++.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2010, 22:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нужна хеш-функция для программы на языке С++ (C++):

Каким образом unordered_map выдает правильное значение для ключа, если его хеш функция допускает коллизии? - C++
Читаю книгу джосаттис стандартная библиотека c++, там в разделе про unordered_map есть описание данного контейнера Раз уж каждый...

Хеш функция - C++
Всем добрый день! В общем, нужно подсчитать кол-во коллизий. За это отвечает функция size_t collisions_count(), но почему-то не...

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

Блок-схема для программы на языке С++ - C++
#include <stdio.h> #include <math.h> int main(int argc, char* argv) { double a; double b; double z; for(a=-5;a<=5;a+=0.5) ...

Шаблоны. Хеш-функция - C++
Добрые день. Есть задание сделать телефонную книгу. Поиск в базе сделать через хеш-функцию. name - фамилия абонента. num - номер...

Нужна функция для суммирования матриц - C++
нужна функция для сложения матриц, естественно что складывать можно только равные матрицы, то по этому должно быть сообщение об ошибке что...

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

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

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

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

Цитата Сообщение от Roma_F Посмотреть сообщение
Кстати из твоего первого сообщения совершенно непонятно для чего тебе нужна хеш-функция - проверять пароли, файлы или просто для быстрого поиска по ключу.
Объясню зачем это нужно. Подробнее можно узнать прочитав эту тему . Я нашел интересный способ хранения паролей от любого количества учетных записей при помощи хэш-функции. Минус такого способа в том, что хэш-функция выводит шестнадцатеричный код, который в качестве пароля ненадежен, т.к. используются только 16 разных символов. Я сделал программу, которая разбирает вывод хэш-функции, два подряд идущих символа (т.е. один байт) преобразовает в одну букву алфавита или цифру.
Например, такой результат хэш-функции
e332a76c29654fcb7f6e6b31ced090c7
преобразовывает в такой
6ibhugs3khhi34x2
Длина строки уменьшается в два раза, но зато пароль становится надежным. Поэтому мне нужна криптографическая хэш-функция, способная выдать строку достаточной длины. Связываться с ненадежными контрольными суммами я не хочу т.к. для хранения паролей их не следует использовать.
0
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
17.06.2010, 00:50 #11
может это подойдёт
0
RNT
Автор FAQ
3134 / 354 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
17.06.2010, 18:30  [ТС] #12
Цитата Сообщение от Roma_F Посмотреть сообщение
может это подойдёт
Не подходит. Нужна криптографическая хэш-функция, а не шифр.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2010, 18:30
Привет! Вот еще темы с ответами:

Хеш-функция, двойное хеширование - C++
Всем привет! Пишу курсач, нужна хеш-функция, которая принимала бы строку и возвращала некий индекс. Написал нечто вроде unsigned...

Функция time(0) для чего тут нужна? - C++
Для чего функция time(0) тут нужна??? #pragma once #include <iostream> class CardPack { public: struct card {

Для чего нужна функция errno_t err? - C++
Почему в Visual C++ 5.0 нужно вводить не FILE *fp; fp = fopen("File" , "w"); ,а FILE *fp; errno_t err; err =...

Нужна рекурсивная функция для переворачивания строк - C++
Write a recursive function to reverse a string :coffee:


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

Или воспользуйтесь поиском по форуму:
12
Yandex
Объявления
17.06.2010, 18:30
Ответ Создать тему
Опции темы

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