Есть ли способ перевернуть crypt () в c?

Не уверен, что это возможно, но я хочу, чтобы начать с строки, а затем выяснить, что вход должен быть в crypt , чтобы вывести эту строку.

Или, может быть, это невозможно, и все это было бы цельной целью?

Да, в коде есть соль, где я пытаюсь это сделать.

По замыслу дизайна crypt() является односторонним hashем. Как все говорили, это означает, что намерение состоит в том, что было бы невозможно вычислить недостижимость для открытия строки открытого текста, которая создает тот же хеш.

Несколько факторов влияют на это намерение дизайна.

  1. Вычисление намного дешевле, чем когда был разработан crypt() . Хуже того, скорость, с которой вычислялось дешевле, не ожидалась, поэтому сейчас она намного дешевле, чем когда-либо предполагалось.

  2. DES не задерживался так же хорошо, как считалось. Однако, вероятно, это был лучший выбор, учитывая общественное состояние знаний в то время.

  3. Даже если вычисление еще не достаточно дешево, чтобы сделать свое собственное взлома, облако, которое является Интернетом, уже проделало большую работу для вас. Люди собирают и публикуют Таблицы Радуги, которые позволяют сократить много вычислений, необходимых для того, чтобы обратить особое внимание на hash. (У Джеффа тоже было сообщение в блоге на радужных столах .) Соль помогает защитить от радужных таблиц (потому что вам понадобится таблица для каждого возможного значения соли), но размер соли, используемый в classической реализации crypt() составляет всего 12 бит, так что это не такой огромный блок, как можно было бы надеяться.

Хуже того, для некоторых высоко оцененных хеш-функций (таких как hash LM, изобретенный для старых паролей Microsoft Lan Manager, но используемый для короткого пароля во всех версиях Windows до Vista) почти полные словари хешей и их обратные существуют.

Если это старая реализация crypt(3) , используя DES, вы можете почти (но не совсем) переборщить ее.

В этой схеме вход усечен до 8 символов, а каждый символ – до 7 бит, что означает, что для поиска требуется 56-битное пространство различных паролей.

Только для DES вы можете искать по всему пространству примерно за 18 дней по FPGA на сумму 10 долларов США ( http://en.wikipedia.org/wiki/Data_Encryption_Standard#Brute_force_attack ), поэтому ожидаемое время составляет 9 дней. Но я предполагаю, что у вас нет $ 10K, чтобы тратить на эту проблему. Дайте ему еще несколько лет, и кто знает, будут ли DES крекеры работать в правдоподобное время на GPU ПК.

Даже тогда crypt(3) традиционно включает в себя 25 раундов DES, с небольшими изменениями в алгоритме, основанном на соли, поэтому вы ожидаете, что он будет по меньшей мере в 25 раз медленнее для грубой силы.

Более новые реализации crypt(3) – это далеко не полная сила, поскольку они основаны на лучших алгоритмах хеширования, чем на DES, основанных на использовании старого crypt(3) .

Конечно, если строка не случайна (например, если это пароль, выбранный кем-то человеком), то вы можете получить гораздо лучшее ожидаемое время, чем грубая сила.

Нет, это идея односторонних hash-функций, но вы можете использовать Google, чтобы помочь вам в некоторых случаях.

Чтобы ответить на комментарий к этому ответу (google не поможет, если есть соль), я говорю: да и нет. Соль увеличивает пространство решений, что делает создание полного словаря менее легким (потому что для каждого слова вы должны вычислять и хранить одну зашифрованную версию для каждой возможной двухбуквенной соли). Если вы предполагаете, что Интернет является гигантской базой данных, а google – его индексом, то, что Google делает, – это поиск, если где-то происходит зашифрованная строка в Интернете. Наличие соли уменьшает вероятность того, что вы ее найдете, но если вам повезло, что это событие присутствует, и оно также вместе с открытым текстом, то у вас есть пароль.

См. Также эту статью о slashdot .

Заключение: соль уменьшит вероятность обнаружения этой конкретной зашифрованной строки вокруг в Интернете, правда, но google безразличен к любому количеству соли и все равно может помочь как-то, если вам повезет (как это было в случае с I дал).

Нет.

crypt () не является обратимым алгоритмом (он использует одностороннюю функцию), который становится более сложным для грубой силы путем добавления соли к зашифрованному значению.

Отредактировано за каждый комментарий.

Нет, вы не можете взглянуть на этот сайт (если вы используете библиотеку GNU C) http://www.gnu.org/s/libc/manual/html_node/crypt.html

То, как соленый склеп, в значительной степени гарантирует, что то, что вы пытаетесь сделать, не будет работать.

Эта функция является односторонней, является основой каждой схемы паролей в мире. Если бы кто-нибудь здесь должен был ответить «да, и вот как ..», правительство будет вынуждено немедленно удалить свой комментарий, сжечь свой дом и развернуть их до неизвестного места.

Короче говоря, нет.

Нет. Это односторонняя функция.