Существует ли готовая двусторонняя хеш-функция для строк с фиксированной длиной хеша в Java? - PullRequest
0 голосов
/ 01 июня 2018

Мне нужно использовать хеш-функцию и функцию хеширования (двустороннюю) для строк.Хеш должен быть фиксированной длины (5-6 символов).

Пример:

String hashed = MagicHashLib.hash("long string"); //hash is hd45dk as an example
String enhashedLongString = MagicHashLib.enhash(hash);

Существует ли уже реализованный алгоритм в Java?Или я должен написать свой собственный?

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Я не думаю, что такой хеш существует независимо от языка программирования.

Вот цитата со страницы википедии по хэш-функции :

A hash function is any function that can be used to map data of arbitrary size to data of fixed size.

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

Упрощенный пример из воображаемой хеш-функции: John отображается на abc.Jane отображается на ghi.Doe также отображается на abc.Итак, когда вы видите abc как хешированное значение, откуда это взялось?Это было John?Это было Doe?

0 голосов
/ 01 июня 2018

То, что вы ищете, называется шифрование и дешифрование .

Хеширование всегда в одну сторону .Вы не можете реально восстановить исходную строку из ее хэшированного значения.

Краткое объяснение различий между хешированием и шифрованием см. В этом ответе

...