Функція хешування на Java - Застосування функції хешу

Зміст:

Anonim

Введення в функцію хешування на Java

Як ми знаємо, що Java - це об'єктно-орієнтована мова, тому повинен існувати механізм для опису стану об'єкта, незалежно від того, наскільки об’єкт може бути великим. Функція хешування на Java з'явилася для виконання цієї вимоги.

Що таке функція хешування?

Функція Hash може бути визначена як функція, яка повертає ціле значення, що відповідає Об'єкту. Функція Hash завжди повертає однакове ціле значення для одного і того ж об'єкта. Ціле значення, повернене хеш-функцією, називається Hash Value. Нижче наведено важливі моменти щодо функції Hash:

  • Завжди повертає ціле число (4 байти) для Об'єкта.
  • Ми не можемо обчислити стан об'єкта з хеш-значення, тобто хеш-функції мають незворотній характер.
  • Два рівні об’єкти матимуть однакове хеш-значення.
  • Два нерівні об'єкти не завжди мають різні значення хеша.

Застосування функції хешу

Ось загальні програми хеш-функцій:

1. Структури даних

Практично кожна мова програмування містить структури даних на основі хешу. Наприклад, java містить таблицю даних Hash, Hash Map, Hash Set, Tree Set, що базується на функції Hash. Основою цих структур даних є дизайн Key-Value, де кожен ключ є унікальним, тоді як одне значення може існувати для декількох ключів.

2. Дайджест повідомлень

Цей алгоритм використовується для перевірки цілісності даних. Цей алгоритм приймає повідомлення будь-якої довжини як вхідний і створює дані з фіксованою довжиною (128 біт) як вихід. Приклади алгоритмів перебору повідомлень включають MD2, MD4, MD5 та MD6.

3. Безпечний алгоритм хешу

Цей алгоритм використовується для захисту даних і використовується в таких додатках і протоколах, як Secure Socket Layer (SSL). SHA-0, SHA-1, SHA-2 та SHA-3 є загальними категоріями алгоритму безпечного хешу.

4. Перевірка і зберігання пароля

Розглянемо сценарій входу, в якому під час введення пароля для автентифікації користувача обчислюється хеш-значення введеного пароля і надсилається по мережі на сервер, на якому зберігається хеш оригіналу. Це робиться для того, щоб не здійснювалося нюхання, коли від клієнта на сервер надсилається пароль.

5. Операція компілятора

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

6. Алгоритм Рабіна- Карпа

Це алгоритм пошуку, який використовує хешування для пошуку одного або декількох шаблонів у заданій рядку. Це один з найбільш часто використовуваних алгоритмів.

7. Порівняльний та порівняльний інтерфейси

Ці інтерфейси містять функції, які використовуються для порівняння двох об'єктів одночасно. Повернене значення цих функцій може бути від'ємним, нульовим або позитивним на основі того, чи є даний об'єкт меншим, рівним або більшим, ніж об'єкт, з яким ми порівнюємо. Внутрішній компаратор та порівнянні інтерфейси використовують хеш-функцію для порівняння об'єктів один з одним.

8. Черга з пріоритетом

Черга з пріоритетом на відміну від звичайної черги, яка відповідає порядку FIFO (First in First out). У черзі пріоритетних елементів розташовані в користувальницькому порядку залежно від їх пріоритету, який реалізується внутрішньо за допомогою порівняльного та порівняльного, який стажисти базуються на хеш-функціях.

Проектування хеш-функцій

Ось деякі загальні принципи проектування для створення хеш-функцій:

  • Хеш-функцію слід ефективно оцінювати.
  • Значення хешу, обчислені з хеш-функцій, повинні бути рівномірно розподілені, це допомагає уникнути зіткнень.
  • Мова програмування Java забезпечує загальну функцію хешування методом hashCode () в надкласі Object.

public int hashCode ()(
//Logic goes here
)

Хеш-зіткнення на Яві

Хеш-зіткнення відбувається, коли два або більше об'єктів повертають одне і те ж хеш-значення. Візьмемо приклад карти хеш-програми Java, яка зберігає дані в парах ключ-значення. Коли ми поміщаємо об'єкт на хеш-карту, обчислюється хеш-значення ключа і на основі цього місця розташування відра хеш-значень для зберігання об'єкта значення. Об'єкти, що мають різні хеш-значення, повинні надходити в різні відра. Коли два або більше об'єктів мають однакове хеш-значення, вони зберігаються в одному і тому ж місці відра, використовуючи додаткову структуру даних, що називається пов'язаним списком. Усі об'єкти, що мають однакове хеш-значення, зв'язані між собою за допомогою пов'язаного списку. Цей механізм називається ланцюжком. Нижче наведено способи поводження зіткненнями є хеш-функція:

  • Ланцюжок: Як уже зазначалося, ідея ланцюга полягає у створенні пов'язаного списку об'єктів, що мають однакове хеш-значення. Прив’язка - проста техніка, але вимагає додаткових накладних витрат.
  • Відкрита адресація: У цій техніці всі елементи зберігаються в хеш-таблиці, в якій кожен запис містить або запис, або NULL. Під час пошуку елемента кожен запит у хеш-таблиці шукає потрібний запис до тих пір, поки не буде знайдено потрібний запис або не буде зроблено висновок про те, що запис не існує в таблиці.

Переваги хешингу

Нижче перелічені переваги хешування:

  1. Порівняйте вміст двох файлів легко та ефективно, не відкриваючи їх.
  2. Функції хешу використовуються для перевірки цілісності файлу.
  3. За допомогою хешування операції пошуку в структурах даних стали швидшими.
  4. Функції хешу відіграють важливу роль у захисті даних, оскільки більшість алгоритмів захисту та протоколів використовують хешування.
  5. Хешинг перетворює дані в коротше значення або ключ фіксованої довжини, який представляє оригінальну рядок, який може бути надісланий по мережі.

Недоліки хешування

Крім переваг, є також деякі обмеження хешування:

  1. Хешинг не може бути реалізований для сортування даних.
  2. Хеш-зіткнення практично неможливо уникнути, що, в свою чергу, призводить до неефективності.

Рекомендовані статті

Це посібник з функцій хешування на Java. Тут ми обговорюємо застосування хеш-функції, а також переваги та недоліки. Ви також можете переглянути наступні статті, щоб дізнатися більше -

  1. Декларація та ініціалізація VB.Net
  2. Програма Java, що показує HashMap і TreeMap
  3. Типи хешування в СУБД
  4. Техніки стеганографії
  5. Масиви в програмуванні Java
  6. Хешмап на Java