есть две заранее известные строки, нужно сделать алгоритм хеширования (не обязательно крипто-стойкого) таким образом, чтобы хеш-значения обоих строк были равны... есть ли что-то, что может для меня такое сделать? знаю, что есть алгоритмы perfect hashing, которые решают обратную проблему, то есть генерируют такой алгоритм, что для каждой входной строки хеш-значения разные, но есть ли что-то в нужную мне сторону?
любой помехоустойчивый код взять и развернуть в противоположную сторону. Типа слово+ошибка через кодер -> заранее известные строки. заранее известные строки в декодер, на выходе первое слово, оно же хэш-значение.
Посчитай сумму обеих строк и подбери перебором несколько действий: сложение/вычитание/хор с константами так, чтоб результат совпал. Буквально вчера делал что-то похожее: есть алгоритм, который по-всякому в разном порядке применяет 3 байта ключа к одному байту, нужно было найти все способы, которыми из одного байта можно получить второй, используя только константы ключа по одному разу. Пусть младшие 3 бита счетчика будут кодировать первую операцию, еще три вторую и так далее, запрещенные состояния отсеиваешь, просто в цикле накручиваешь и проверяешь совпало ли.
Rel На правах оффтопа и праздного интереса: а можно какие-нибудь подробности практического применения такого "хеша"? Если исходить от определения понятия "хеш-функция" как преобразования массива переменной длины в массив длины постоянной и названных Вами условий работы этой фукнции, то получается что int hash (...) {return 0xDEADBEEF;} вполне подходит Может есть ещё какие-то неочевидные характеристики входных данных? Именно 2 строки, для других пар строк результат неважен? Или Вам просто нужна хеш-функция с прогнозируемой коллизией?
можно строки разбить на подстроки и для каждой пары подстрок сгенерить полином == полином есмь хэш. Да, не криптостойкое решение