У меня большое и уникальное целое число (на самом деле хеш SHA1).
Примечание: Пока я говорю о хэше SHA1, это , а не криптография / секретный вопрос! Я не пытаюсь сломать SHA1. Представьте случайное 160-разрядное целое число вместо SHA1, если это поможет.
Я хочу (не по какой-либо другой причине, кроме как повеселиться) найти алгоритм для сопоставления этого хэша SHA1 с генерируемой компьютером (псевдо-) английской фразой. Отображение должно быть двунаправленным (то есть, зная алгоритм, нужно уметь вычислять исходный хеш SHA1 из этой фразы).
Фраза не должна иметь смысла. Я бы даже согласился на целый параграф ерунды. (Хотя качество - английскость - абзаца, вероятно, должно быть лучше, чем для простой фразы.)
Лучший алгоритм будет производить более короткие, более естественно выглядящие, более уникальные фразы.
Вариант: это нормально, если я смогу работать только с частью хэша. Скажем, первые шесть шестнадцатеричных цифр в порядке.
Возможное использование сгенерированной фразы: удобочитаемая версия идентификатора коммита Git для использования в качестве девиза для данной версии программы, созданной на основе этого коммита. (Как я уже сказал, это «для удовольствия». Я не утверждаю, что это очень практично или гораздо более читабельно, чем сам SHA1.)
Возможный подход: в прошлом я пытался построить таблицу вероятностей (слов) и генерировать фразы в виде цепей Маркова, заполняя генератор (выбирая ветви из дерева вероятностей), согласно битам, которые я прочитал из ША. Это было не очень удачно, полученные фразы были слишком длинными и безобразными. Я не уверен, было ли это ошибкой или общим недостатком алгоритма, поскольку мне пришлось отказаться от него достаточно рано.
Теперь я думаю о попытке решить проблему еще раз. Любой совет, как подойти к этому? Как вы думаете, цепной подход Маркова может работать здесь? Что-то еще?