Какой хеш начинается с
Перейти к содержимому

Какой хеш начинается с

  • автор:

DES(Unix)
IvS7aeT4NzQPM
Применяется в Linux и др. подобных ОС.
Длина: 13 символов.
Описание: первые 2 символа – это соль (случайные символы, в нашем примере солью является строка «Iv»), а затем – непосредственно хэш.

Domain Cached Credentials
Admin:b474d48cdfc4974d86ef4d24904cdd91
Применяется для кэширования паролей домена Windows.
Длина: 16 байт.
Алгоритм: MD4(MD4(Unicode($pass)).Unicode(strtolower($userna me)))

MD5(Unix)
$1$12345678$XM4P3PrKBgKNnTaqG9P0T/
Применяется в Linux и др. подобных ОС.
Длина: 34 символа.
Описание: хэш начинается с сигнатуры $1$, затем идет соль (до 8 случайных символов, в нашем примере солью является строка «12345678″), еще один символ $, а затем – непосредственно хэш.

MD5(APR)
$apr1$12345678$auQSX8Mvzt.tdBi4y6Xgj.
Применяется в Linux и др. подобных ОС.
Длина: 37 символов.
Описание: хэш начинается с сигнатуры $apr1$, затем идет соль (до 8 случайных символов, в нашем примере солью является строка «12345678″), еще один символ $, а затем – непосредственно хэш.
Алгоритм: фактически это цикл на 2000 вызовов алгоритма MD5.

MD5(phpBB3)
$H$9123456785DAERgALpsri.D9z3ht120
Применяется в phpBB 3.x.x.
Длина: 34 символа.
Описание: хэш начинается с сигнатуры $H$, затем идет один символ (чаще всего это символ ’9′), затем идет соль (8 случайных символов, в нашем примере солью является строка «12345678″), а затем – непосредственно хэш.
Алгоритм: фактически это цикл на 2048 вызовов алгоритма MD5.

MD5(WordPress)
$P$B123456780BhGFYSlUqGyE6ErKErL01
Применяется в WordPress.
Длина: 34 символа.
Описание: хэш начинается с сигнатуры $P$, затем идет один символ (чаще всего это символ ‘B’), затем идет соль (8 случайных символов, в нашем примере солью является строка «12345678″), а затем – непосредственно хэш.
Алгоритм: фактически это цикл на 8192 вызовов алгоритма MD5

MySQL
606717496665bcba
Применяется в старых версиях MySQL.
Длина: 8 байт.
Описание: хэш состоит из двух DWORD’ов, каждый из которых не превышает значения 0x7fffffff.

MySQL5
*E6CC90B878B948C35E92B003C792C46C58C4AF40
Применяется в новых версиях MySQL.
Длина: 20 байт.
Алгоритм: SHA-1(SHA-1($pass))
Примечание: в программу нужно загружать хэши без звездочки, которая стоит в начале хэшей.

RAdmin v2.x
5e32cceaafed5cc80866737dfb212d7f
Применяется в программе Remote Administrator v2.x.
Длина: 16 байт.
Алгоритм: пароль дополняется нулями до длины 100 байт и вся эта строка хэшируется алгоритмом MD5.

MD5
c4ca4238a0b923820dcc509a6f75849b
Применяется в phpBB v2.x, Joomla версии ниже 1.0.13, а также во многих других форумах и CMS.
Длина: 16 байт.
Алгоритм: соответствует функции md5() языка PHP.

md5($pass.$salt)
6f04f0d75f6870858bae14ac0b6d9f73:1234
Применяется в WB News, Joomla версии 1.0.13 и выше.
Длина: 16 байт.

md5($salt.$pass)
f190ce9ac8445d249747cab7be43f7d5:12
Применяется в osCommerce, AEF, Gallery и других CMS.
Длина: 16 байт.

md5(md5($pass))
28c8edde3d61a0411511d3b1866f0636
Применяется в e107, DLE, AVE, Diferior, Koobi и других CMS.

md5(md5($pass).$salt)
6011527690eddca23580955c216b1fd2:wQ6
Применяется в vBulletin, IceBB.
Длина: 16 байт.

md5(md5($salt).md5($pass))
81f87275dd805aa018df8befe09fe9f8:wH6_S
Применяется в IPB.
Длина: 16 байт.

md5(md5($salt).$pass)
816a14db44578f516cbaef25bd8d8296:1234
Применяется в MyBB.
Длина: 16 байт.

md5($salt.$pass.$salt)
a3bc9e11fddf4fef4deea11e33668eab:1234
Применяется в TBDev.
Длина: 16 байт.

md5($salt.md5($salt.$pass))
1d715e52285e5a6b546e442792652c8a:1234
Применяется в DLP.
Длина: 16 байт.

SHA-1
356a192b7913b04c54574d18c28d46e6395428ab
Применяется во многих форумах и CMS.
Длина: 20 байт.

sha1(strtolower($username).$pass)
Admin:6c7ca345f63f835cb353ff15bd6c5e052ec08e7a
Применяется в SMF.
Длина: 20 байт.

sha1($salt.sha1($salt.sha1($pass)))
cd37bfbf68d198d11d39a67158c0c9cddf34573b:1234
Применяется в Woltlab BB.
Длина: 20 байт.

SHA-256(Unix)
$5$12345678$jBWLgeYZbSvREnuBr5s3gp13vqi…
Применяется в Linux и др. подобных ОС.
Длина: 55 символов.
Описание: хэш начинается с сигнатуры $5$, затем идет соль (до 8 случайных символов, в нашем примере солью является строка «12345678″), еще один символ $, а затем – непосредственно хэш.
Алгоритм: фактически это цикл на 5000 вызовов алгоритма SHA-256.

SHA-512(Unix)
$6$12345678$U6Yv5E1lWn6mEESzKen42o6rbEm…
Применяется в Linux и др. подобных ОС.
Длина: 98 символов.
Описание: хэш начинается с сигнатуры $6$, затем идет соль (до 8 случайных символов, в нашем примере солью является строка «12345678″), еще один символ $, а затем – непосредственно хэш.
Алгоритм: фактически это цикл на 5000 вызовов алгоритма SHA-512.

Комментарии

Всего: 8

Какой хеш начинается с

Помогите определить тип хеша. Вот он 17463089ccd29d4b57b3e53b7a2d0b18.
Только не нужно тыкать во всякие темы. Спасибку тыкну)

Читай
Как определить тип хэша.

1) Если хэш начинается с сигнатуры $1$, то обычно это MD5(Unix) хэш.
Если хэш начинается с сигнатуры $apr1$, то обычно это MD5(APR) хэш.
Хэши длиной 8 байт (16 символов), могут быть: MySQL-хэш или любой более длинный хэш, «урезанный» до длины 8 байт.
Длину 16 байт (32 символа) обычно имеют следующие типы хэшей: MD5, его salt’овые и составные производные (например, md5(md5($pass).$salt), md5(md5($pass))), MD4 а также другие хэши.
Если хэш имеет длину 20 байт (40 символов), то это может быть SHA-1 или MySQL5-хэш.
DES(Unix) хэш имеет длину 13 символов.
Хэши паролей популярной игры Lineage II C4 начинаются с 0x и имеет длину 34 символа.

2) Если тип хэша неизвестен, то нужно узнать — какой алгоритм применяется в программе, из которой хэш был извлечен. Например, можно проанализировать исходные тексты PHP-скрипта, в котором используется этот хэш.

3) В распространенных скриптах и программах по умолчанию используються следующие типы хэшей (так же указаны названия таблиц и длина соли):

IPB 2.x.x — md5(md5($salt).md5($pass)), префикс — whb_, таблица — members_converge, salt — 5 символов
IPB 1.x — md5($pass), префикс — whb_, таблица — members
vBulletin 3.x.x — md5(md5($pass).$salt), префикс — нет, таблица — user, salt — 3 символа
SMF 1.1.x — sha1($username.$pass), префикс — smf_, таблица — members
phpBB 2.0.1 — 2.0.21 — md5($pass), префикс — phpbb_, таблица — users
phpBB 3.x — MD5(phpBB3)
YaBB — MD5(HMAC)
PunBB 1.2.x — SHA-1, префикс — нет, таблица — users
e107 — md5(md5($pass))
Beehive — md5($pass), префикс — нет, таблица — USER
Intellect Board — md5($pass), префикс — нет, таблица — User
MercuryBoard- md5($pass), префикс — mb_, таблица — users
MiniBB- md5($pass), префикс — minibbtable_, таблица — users
myBB 1.2.x — md5(md5($salt).md5($pass)), префикс — mybb_, таблица — users
PBLang — md5($pass), в файле /db/members/имя_юзера
PhpMyForum — md5($pass), префикс — pmf_, таблица — user
QuickSilver Forum — md5($pass), префикс — qsf_, таблица — users
UseBB — md5($pass), префикс — usebb_ , таблица — members
Vanilla — md5($pass), префикс — LUM_, таблица — User
VikingBoard — md5($pass), префикс — vboard_, таблица — member
W-Agora — md5($pass), префикс — [название]_. таблица — users
Liberty Reserve API/SCI — SHA256
TBDev v2.0 — md5($salt.$pass.$salt)
TorrentStrike v0.4 — md5($salt.$pass.$salt)
Lineage II C4 — lineage2_c4

4) Salt (соль) – это строка из случайных символов, сохраняется либо вместе с самим хэшем (к примеру, в MD5(Unix)) либо отдельно от хэша, обычно в таблице рядом с ним.

5) Всегда можно увидеть, как выглядит тот или иной хэш, используя сервис [Ссылки могут видеть только зарегистрированные и активированные пользователи] где представлено около 100 видов хэшей.

6) Иногда хэш может быть в Base64-кодировке и для его анализа хэш лучше преобразовать в более удобный 16-ричный вид. Для этого также можно использовать вышеупомянутый сервис или соответствующий инструмент в программе PasswordsPro.

28.03.2010, 18:57

Читай
Как определить тип хэша.

1) Если хэш начинается с сигнатуры $1$, то обычно это MD5(Unix) хэш.
Если хэш начинается с сигнатуры $apr1$, то обычно это MD5(APR) хэш.
Хэши длиной 8 байт (16 символов), могут быть: MySQL-хэш или любой более длинный хэш, «урезанный» до длины 8 байт.
Длину 16 байт (32 символа) обычно имеют следующие типы хэшей: MD5, его salt’овые и составные производные (например, md5(md5($pass).$salt), md5(md5($pass))), MD4 а также другие хэши.
Если хэш имеет длину 20 байт (40 символов), то это может быть SHA-1 или MySQL5-хэш.
DES(Unix) хэш имеет длину 13 символов.
Хэши паролей популярной игры Lineage II C4 начинаются с 0x и имеет длину 34 символа.

2) Если тип хэша неизвестен, то нужно узнать — какой алгоритм применяется в программе, из которой хэш был извлечен. Например, можно проанализировать исходные тексты PHP-скрипта, в котором используется этот хэш.

3) В распространенных скриптах и программах по умолчанию используються следующие типы хэшей (так же указаны названия таблиц и длина соли):

IPB 2.x.x — md5(md5($salt).md5($pass)), префикс — whb_, таблица — members_converge, salt — 5 символов
IPB 1.x — md5($pass), префикс — whb_, таблица — members
vBulletin 3.x.x — md5(md5($pass).$salt), префикс — нет, таблица — user, salt — 3 символа
SMF 1.1.x — sha1($username.$pass), префикс — smf_, таблица — members
phpBB 2.0.1 — 2.0.21 — md5($pass), префикс — phpbb_, таблица — users
phpBB 3.x — MD5(phpBB3)
YaBB — MD5(HMAC)
PunBB 1.2.x — SHA-1, префикс — нет, таблица — users
e107 — md5(md5($pass))
Beehive — md5($pass), префикс — нет, таблица — USER
Intellect Board — md5($pass), префикс — нет, таблица — User
MercuryBoard- md5($pass), префикс — mb_, таблица — users
MiniBB- md5($pass), префикс — minibbtable_, таблица — users
myBB 1.2.x — md5(md5($salt).md5($pass)), префикс — mybb_, таблица — users
PBLang — md5($pass), в файле /db/members/имя_юзера
PhpMyForum — md5($pass), префикс — pmf_, таблица — user
QuickSilver Forum — md5($pass), префикс — qsf_, таблица — users
UseBB — md5($pass), префикс — usebb_ , таблица — members
Vanilla — md5($pass), префикс — LUM_, таблица — User
VikingBoard — md5($pass), префикс — vboard_, таблица — member
W-Agora — md5($pass), префикс — [название]_. таблица — users
Liberty Reserve API/SCI — SHA256
TBDev v2.0 — md5($salt.$pass.$salt)
TorrentStrike v0.4 — md5($salt.$pass.$salt)
Lineage II C4 — lineage2_c4

4) Salt (соль) – это строка из случайных символов, сохраняется либо вместе с самим хэшем (к примеру, в MD5(Unix)) либо отдельно от хэша, обычно в таблице рядом с ним.

5) Всегда можно увидеть, как выглядит тот или иной хэш, используя сервис [Ссылки могут видеть только зарегистрированные и активированные пользователи] где представлено около 100 видов хэшей.

6) Иногда хэш может быть в Base64-кодировке и для его анализа хэш лучше преобразовать в более удобный 16-ричный вид. Для этого также можно использовать вышеупомянутый сервис или соответствующий инструмент в программе PasswordsPro.

Как надо хешировать пароли и как не надо

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

Постараюсь очень лаконично и быстро обрисовать ситуацию с хэшами.

Сразу определю какую задачу применения хешей буду рассматривать — аутентификация пользователей. Не токены восстановления паролей, не аутентификация запросов, не что-то еще. Это также не статья про защиту канала передачи данных, так что комментарии по challenge-response и SSL неуместны!

Матчасть (короткая)

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

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

Вникать в тонкости криптографии прикладному разработчику не обязательно, достаточно запомнить какие хэш-функции (алгоритмы по названию) можно сейчас использовать, а какие уже нет. MD5 — уже нельзя, коллеги, — используйте bcrypt/scrypt.

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

  • стойкость к атакам перебора (прямой перебор и перебор по словарю)
  • невозможность поиска одинаковых паролей разных пользователей по хешам

Для выполнения первого требования нужно использовать стойкие в настоящее время (а не в 90х годах!) хеш-функции.
Для выполнения второго — к паролю перед хешированием добавляется случайная строка (соль). Таким образом, у двух пользователей с паролем «123456» будут разные соли «соль1» и «соль2», а соответственно и хеш-функции от «123456соль1» и «123456соль2» в базе тоже будут разные.

Теперь немного про систему хранения — и соль и сам хеш хранятся в базе данных.
То есть получив доступ к СУБД, злоумышленник получает и значения хешей и соли.

Используйте локальный параметр!

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

Для того чтобы еще усложнить жизнь атакующему, Solar Designer www.openwall.com/presentations/YaC2012-Password-Hashing-At-Scale/mgp00005.html предлагает ввести еще одну штуку, под названием локальный параметр.

Это по сути «вторая соль» дописывается ко всем (паролям+соль) конструкциям, и является одинаковой для всех хешей в базе. В чем же трюк? В том, что локального параметра в базе нет. Это константа системы, которая хранится в памяти приложения, куда она попадает из конфига (любым способом, только не из базы).

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

Единственный раз мы (ONsec) ломали хеши с локальным параметром, выработав при этом тактику атаки на сам локальный параметр (регистрируемся в приложении, затем ищем в базе свой хеш, соль (свой пароль мы и так знаем) и перебираем ЛП). И тщетно. На длинах 16+ байт для современных функций хеширования — это очень дорого по железу. В итоге проще оказалось скомпрометировать систему аутентификации (проставить себе role=admin в базе через UPDATE 😉 )

Защищайте свои хранилища надежно и грамотно!

Заключение

Буду реалистом — естественно, никто не станет переписывать свои проекты ради «каких-то» хешей. Но новые проекты можно писать на scrypt/bcrypt. А также — внедряйте локальный параметр даже на слабых MD5 — он правда помогает, проверено 🙂

При переходе на другой тип хеширования, помимо трудозатрат, часто встает вопрос производительности. Действительно, более стойкие алгоритмы потребляют больше ресурсов. Тестируйтесь перед внедрением для своих нагрузок по скорости аутентификации пользователей в секунду (для большинства крупных проектов переход на scrypt оказался безболезненным). Выбор конкретного идеального типа хеша в конкретной ситуации может сильно разнится. Так, например, ДБО все чаще выбирают железные решения для генерации хешей с заданной скоростью.

В заключении, привожу скорости перебора хешей (единицы измерения — мегахэши в секунду, то есть количество ), полученных на карточке AMD Radeon 7990 стоимостью менее $1000 (даже по старому курсу):

  • MD5: 16000 M/s
  • SHA-1: 5900 M/s
  • SHA256: 2050 M/s
  • SHA512: 220 M/s
  • NTLM: 28400 M/s
  • bcrypt: 8,5 k/s
  • хеш-функции
  • onsec
  • хеш
  • хеширование
  • хэш-функция
  • хэширование
  • хэширование паролей
  • хэш-функции
  • аутентификация пользователей

Хеш-таблица

Существует два основных вида хеш-таблиц: с цепочками и открытой адресацией. Хеш-таблица содержит некоторый массив [math]H[/math] , элементы которого есть пары (хеш-таблица с открытой адресацией) или списки пар (хеш-таблица с цепочками).

Выполнение операции в хеш-таблице начинается с вычисления хеш-функции от ключа. Хеш-код [math]i = h(key)[/math] играет роль индекса в массиве [math]H[/math] , а зная индекс, мы можем выполнить требующуюся операцию (добавление, удаление или поиск).

Количество коллизий зависит от хеш-функции; чем лучше используемая хеш-функция, тем меньше вероятность их возникновения.

Вероятность коллизий при вставке в хеш-таблицу превышает 50%

Пусть хеш-таблица имеет размер [math]len[/math] и в нее добавляют [math]n[/math] элементов. Рассмотрим [math]

‘(n)[/math] — вероятность того, что не возникнет ни одной коллизии. Добавим два любых элемента в нашу хеш-таблицу. Вероятность того, что они не попадут в одну и ту же ячейку таблицы равна [math]1 — \dfrac[/math] . Возьмем еще один элемент. Тогда вероятность того, что третий элемент не попадет в одну из уже занятых ячеек равна [math]1 — \dfrac[/math] . Рассуждая аналогичным образом, получим формулу: [math]

‘(n) = \left( 1 — \dfrac\right )\cdot \left( 1 — \dfrac\right )\dots\left( 1 — \dfrac\right ) = \dfrac> = \dfrac \cdot \left (len — n \right)!>[/math]

Тогда [math]

(n)[/math] — вероятность возникновения коллизии равна: [math]p(n) = 1 —

‘(n)[/math] ,

Способ разрешения коллизий — важная составляющая любой хеш-таблицы.

Полностью избежать коллизий для произвольных данных невозможно в принципе, и хорошая хеш-функция в состоянии только минимизировать их количество. Но, в некоторых специальных случаях их удаётся избежать. Если все ключи элементов известны заранее, либо меняются очень редко, то можно подобрать хеш-функцию, с помощью которой, все ключи будут распределены по хеш-таблице без коллизий. Это хеш-таблицы с прямой адресацией; в них все операции, такие как: поиск, вставка и удаление работают за [math]O(1)[/math] .

Если мы поделим число хранимых элементов на размер массива [math]H[/math] (число возможных значений хеш-функции), то узнаем коэффициент заполнения хеш-таблицы (англ. load factor). От этого параметра зависит среднее время выполнения операций.

Хеширование

Хеширование (англ. hashing) — класс методов поиска, идея которого состоит в вычислении хеш-кода, однозначно определяемого элементом с помощью хеш-функции, и использовании его, как основы для поиска (индексирование в памяти по хеш-коду выполняется за [math]O(1)[/math] ). В общем случае, однозначного соответствия между исходными данными и хеш-кодом нет в силу того, что количество значений хеш-функций меньше, чем вариантов исходных данных, поэтому существуют элементы, имеющие одинаковые хеш-коды — так называемые коллизии, но если два элемента имеют разный хеш-код, то они гарантированно различаются. Вероятность возникновения коллизий играет немаловажную роль в оценке качества хеш-функций. Для того чтобы коллизии не замедляли работу с таблицей существуют методы для борьбы с ними.

Определение:
[math]U [/math] — множество объектов (универсум).
[math]h : U \rightarrow S = \mathcal 0 \dots m — 1 \mathcal [/math] — называется хеш-функцией, где множество [math]S[/math] хранит ключи из множества [math]U[/math] .
Если [math]x \in U[/math] значит [math]h(x) \in S[/math]
Коллизия (англ. collision): [math]\exists x \neq y : h(x) = h(y)[/math]
Виды хеширования
  • По способу хранения:

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

Динамическое — добавляем, удаляем и смотрим на наличие нужных элементов.

  • По виду хеш-функции:

Свойства хеш-таблицы

На поиск элемента в хеш-таблице в худшем случае, может потребоваться столько же времени, как и в списке, а именно [math]\Theta(n)[/math] , но на практике хеширование более эффективно. При некоторых разумных допущениях математическое ожидание времени поиска элемента в хеш-таблице составляет [math]O(1)[/math] . А все операции (поиск, вставка и удаление элементов) в среднем выполняются за время [math]O(1)[/math] . При этом не гарантируется, что время выполнения отдельной операции мало́, так как при достижении некоторого значения коэффициента заполнения необходимо перехешировать таблицу: увеличить размер массива [math]H[/math] и заново добавить в новую хеш-таблицу все пары.

Хеширование в современных языках программирования

Почти во всех современных языках присутствуют классы, реализующие хеширование. Рассмотрим некоторые из них.

  • Java
    • HashMap [1] — реализация интерфейса ассоциативного массива с использованием хеш-таблицы,
    • HashSet [2] — реализация интерфейса множества с использованием хеш-таблицы,
    • LinkedHashMap [3] — потомок класса HashMap. Позволяет просматривать значения в том порядке, в котором они были добавлены.
    • unordered_map [4] — реализация интерфейса ассоциативного массива с использованием хеш-таблицы,
    • unordered_set [5] — реализация интерфейса множества с использованием хеш-таблицы.
    • dict [6] — реализация интерфейса ассоциативного массива с использованием хеш-таблицы,
    • set [7] — реализация интерфейса множества с использованием хеш-таблицы.

    Примечания

    1. ↑HashMap — Java Platform SE 7
    2. ↑HashSet — Java Platform SE 7
    3. ↑LinkedHashMap — Java Platform SE 7
    4. ↑unordered_map — cplusplus.com
    5. ↑unordered_set — cplusplus.com
    6. ↑dictobject.c — https://github.com/python/cpython
    7. ↑setobject.c — https://hg.python.org

    Источники информации

    • Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн. «Алгоритмы. Построение и анализ» — «Вильямс», 2011 г. — 1296 стр. — ISBN 978-5-8459-0857-5, 5-8459-0857-4, 0-07-013151-1
    • Дональд Кнут. «Искусство программирования, том 3. Сортировка и поиск» — «Вильямс», 2007 г. — 824 стр. — ISBN 0-201-89685-0
    • Википедия — Хеш-таблица
    • Дискретная математика и алгоритмы
    • Хеширование
    • Структуры данных

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *