2009-07-19 1 views
0
crypt(text,"k7") 

Я посмотрел его, и, по-видимому, «k7» - это соль, но я понятия не имею, что это значит, и какой выход будет получен из этого, кто-нибудь знает?Что делает crypt() в C?

+2

-1 SO не является заменой для справочных страниц – Nifle

ответ

8

С crypt Man page.

Описание

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

ключ является введенным пользователем паролем.

соль - это двухсимвольная строка, выбранная из комплекта [a-zA-Z0-9./]. Эта строка используется, чтобы нарушить алгоритм одним из 4096 способов.

+4

+1 за то, что он точным и умеет использовать слово «perturb» в фактическом предложении, описывающем алгоритм ... –

+3

Он должен быть предоставлен автору страницы руководства , но спасибо! –

1

Как указывает Рэндольфо, это односторонний процесс хэширования текста.

Стандартное использование для crypt() заключается в хранении паролей. Очевидно, что хранить пароль в виде открытого текста было бы очень плохо. Вместо этого crypt() используется для генерации хэша пароля. Когда вы вводите пароль, к нему применяется crypt(), а затем сравниваются два хэша.

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

0

C Manual - Crypt

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

8

Все остальные правильные ответы, но до сих пор никто не объяснил, почему соль есть.

В Википедии есть хорошая страница по salts и Rainbow Tables, которые являются основной причиной, почему у нас есть соли.

Без соли склеп в основном представляет собой одностороннюю хеширующую функцию. Это займет пароль и вернет хешированную версию этого пароля. Таблицы Rainbow обеспечивают оптимизированный метод для преодоления «одностороннего» характера этого хэша и возврата исходного пароля.

Если вам удастся получить хэшированные пароли (через какой-либо эксплойт базы данных или доступ к файлу /etc/passwd или /etc/shadow), вы могли бы теоретически узнать множество паролей людей.

Соль добавляет дополнительный «случайный» фактор к смеси. Вам нужно создать случайную соль и сохранить ее где-нибудь (с паролем в порядке, но лучше - отдельным). Теперь одного набора радужных столов недостаточно, вам вдруг понадобится 65536 наборов таких таблиц (в случае двухбайтовой соли). Соль также может храниться отдельно от пароля, добавляя дополнительное препятствие.

Соль также помогает предотвратить использование пользователями одинаковых паролей, имеющих одинаковый пароль; соль обычно выбирается случайным образом, и если соли различны, то хешированные пароли будут сильно отличаться.

Я также укажу на эту запись в блоге, объясняющую некоторые password basics, которые я нашел очень информативными.

+0

@VladimirF, вы имеете в виду слово «соль» в этом ответе? – Mamun