Алгоритм хеширования строки до динамического количества символов

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


person The Cookies Dog    schedule 12.03.2019    source источник
comment
Для каких целей вам нужна такая штука?   -  person deceze♦    schedule 12.03.2019
comment
Я хочу создать идентификатор, который зависит от неопределенного количества входных данных, но длина вывода всегда должна быть одинаковой. Я не могу объединить входные данные как есть, так как мне нужен способ проверить, есть ли еще части исходных хэшей в идентификаторе. Скажем, идентификатор ABCDEF, где A, B, C, D, E и F — хэши динамической длины. Мне нужно иметь возможность пересчитать A, B, C и т.д.). Надеюсь, это поможет!   -  person The Cookies Dog    schedule 12.03.2019
comment
Итак, hashA + hashB + hashC + ... всегда должно равняться заданной длине, поэтому вы хотите сделать длину каждого хэша динамической, чтобы всегда достигать общей длины? … Я бы сначала пошел дальше и спросил, для чего именно вам нужен это. Убедитесь, что у вас нет проблемы XY.   -  person deceze♦    schedule 12.03.2019
comment
Это требование подходит для того, для чего оно мне нужно.   -  person The Cookies Dog    schedule 12.03.2019


Ответы (1)


Возможно, вам нужны Расширяемые функции вывода (XOF)!

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

Семейство SHA-3 состоит из четырех криптографических хеш-функций, [...] и двух функций расширяемого вывода (XOF), называемых SHAKE128 и SHAKE256.

Вы можете попробовать оба варианта на странице https://emn178.github.io/online-tools/. Для выходных битов выберите желаемое число или символы.

Для реализации Java см. криптобиблиотеку Bouncy Castle, которая поддерживает оба алгоритма https://www.bouncycastle.org/specifications.html

Но помните о коллизиях, если длина хеша слишком мала.

person hans    schedule 14.03.2019
comment
Спасибо @hans, это выглядит многообещающе! - person The Cookies Dog; 14.03.2019