Что делает crypt () в C? - PullRequest
       39

Что делает crypt () в C?

3 голосов
/ 19 июля 2009
crypt(text,"k7")

Я посмотрел на него и, очевидно, 'k7' - это соль, но я понятия не имею, что это значит, и какой тип выхода будет из этого, кто-нибудь знает?

Ответы [ 5 ]

12 голосов
/ 19 июля 2009

Из справочной страницы crypt .

Описание

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

ключ - это введенный пользователем пароль.

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

10 голосов
/ 19 июля 2009

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

В Википедии есть хорошая страница о солях и Радужных таблицах , которые являются основной причиной, по которой у нас есть соли.

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

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

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

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

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

1 голос
/ 19 июля 2009

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

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

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

0 голосов
/ 19 июля 2009

C Руководство - Crypt

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

0 голосов
/ 19 июля 2009

Википедия FTW

Итог: это односторонние хеши text

...