Russian Qt Forum

Программирование => Алгоритмы => Тема начата: CuteBunny от Сентябрь 25, 2013, 17:32



Название: "Обратимая" хеш-функция?
Отправлено: CuteBunny от Сентябрь 25, 2013, 17:32
Доброго времени суток, всем!

Существуют ли в теории алгоритмы преобразования текста произвольной длины в текст фиксированной длины?
Я слышал краям уха, будто хеш-функции позволяют преобразовать один текст произвольной длины в другой текст фиксированной длины, только обратно уже не вернуть.
Можно ли сделать тоже самое только с возможностью потом восстановить исходный текст?


Название: Re: "Обратимая" хеш-функция?
Отправлено: Bepec от Сентябрь 25, 2013, 17:42
Есть. Это называется архивирование.

А уникальный архиватор в хеш и обратно - это архиватор бабушкина. Весь интернет на одной флешке.



Название: Re: "Обратимая" хеш-функция?
Отправлено: Serr500 от Сентябрь 25, 2013, 21:29
Можно ли сделать тоже самое только с возможностью потом восстановить исходный текст?
Вам, наверное, нужно не то, что Вы написали (такого не бывает), а простое обратимое шифрование. Посмотрите в сторону AES.

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


Название: Re: "Обратимая" хеш-функция?
Отправлено: Igors от Сентябрь 26, 2013, 07:20
Существуют ли в теории алгоритмы преобразования текста произвольной длины в текст фиксированной длины?
Такого (обратимого) однозначно нет - как и вечного двигателя. Возможно Вы имели ввиду "переменной но ограниченной длины в текст фиксированной длины"


Название: Re: "Обратимая" хеш-функция?
Отправлено: Bepec от Сентябрь 26, 2013, 08:19
Вон на хабре библлиотечку выкладывали - данные любой длины упаковываются в число pi. Вот только данные для восстановления обычно больше, чем сами данные :D


Название: Re: "Обратимая" хеш-функция?
Отправлено: Igors от Сентябрь 26, 2013, 08:46
Вон на хабре библлиотечку выкладывали - данные любой длины упаковываются в число pi. Вот только данные для восстановления обычно больше, чем сами данные :D
Длина числа pi не фиксирована  :)


Название: Re: "Обратимая" хеш-функция?
Отправлено: Bepec от Сентябрь 26, 2013, 08:49
Ну это да :D Фиксированная длина - бесконечность :D


Название: Re: "Обратимая" хеш-функция?
Отправлено: CuteBunny от Сентябрь 26, 2013, 09:54
Существуют ли в теории алгоритмы преобразования текста произвольной длины в текст фиксированной длины?
Такого (обратимого) однозначно нет - как и вечного двигателя. Возможно Вы имели ввиду "переменной но ограниченной длины в текст фиксированной длины"

Длина, ограничена в MAX_PATH.

Задача вообще такая: есть свой формат файла-архива, в котором каждое имя файла записано в списке в виде c-строки. Длина имени файла может быть в пределах от [1; MAX_PATH].
Т.к. в архиве оно хранится как c-строка, там имхо используется костыль при чтении бинарного файла, как strcpy, где src - это начало имени файла. Вот я и подумал, было бы
круто, если бы имена файлов в архиве всегда были бы фиксированной длины (каким-то образом закодированы, и обратно могли бы легко быть раскодированы при распаковке), меньше чем MAX_PATH - и место экономишь и нет такого костыля с c-строкой, имхо конечно.


Название: Re: "Обратимая" хеш-функция?
Отправлено: CuteBunny от Сентябрь 26, 2013, 09:59
Можно ли сделать тоже самое только с возможностью потом восстановить исходный текст?
Вам, наверное, нужно не то, что Вы написали (такого не бывает), а простое обратимое шифрование. Посмотрите в сторону AES.

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

Да, я подумывал на алгоритмами блочного шифрования вроде aes, des, возможно это и будет лучшим решением, хотя я думал, может есть что-нибудь проще. Просто еще не понятно, какой длины будет массив байтов на выходе, если у меня на входе строки с переменной длиной [1; MAX_PATH]?


Название: Re: "Обратимая" хеш-функция?
Отправлено: CuteBunny от Сентябрь 26, 2013, 10:00
Есть. Это называется архивирование.

А уникальный архиватор в хеш и обратно - это архиватор бабушкина. Весь интернет на одной флешке.



Ну вообще, да, речь идет об архивировании файлов.)


Название: Re: "Обратимая" хеш-функция?
Отправлено: Bepec от Сентябрь 26, 2013, 10:12
Ну тогда подкорректируем задачу.

У вас есть ваш формат архива. Вы хотите его подкорректировать, чтобы имя файла всегда было не более MAX_PATH - сокращайте имена. Ибо никакой архиватор не сможет ужать "Мама мыла раму и на улице пахло мылом.txt" в 4-5 символов.

Либо теряем часть имени, либо придумываем инновационные решения. (Сколково ни одного не придумало вроде :) )