crypt
- это функция шифрования пароля. Она основана на алгоритме
Data Encryption Standard с различными расширениями и вариациями,
нацеленными на усложнение задачи поиска ключа.
key
- это задаваемый пользователем пароль.
salt
- это двухсимвольная строка, выбираемая из набора
[a-zA-Z0-9./].
Эта строка используется для направления алгоритма по одному из 4096-и путей.
Если взять младшие 7 битов каждого из первых 8 символов
key,
то получается 56-битный ключ.
Этот ключ используется для многократного шифрования константной строки
(обычно строки, состоящей из символов "0"). Возвращаемое значение -
указатель на зашифрованный пароль, серия из 13-и ASCII-символов
(первые два символа содержат salt). Возвращаемое значение - указатель на
статические данные, которые записываются вновь при каждом вызове
crypt.
Внимание: количество ключей равно
2**56,
т.е., существует 7.2e16 возможных вариантов.
Простой поиск в этом множестве возможен с помощью большого количества
параллельных компьютеров. Программное обеспечение, такое, как
crack(1),
возможно, отыщет часть ключей из этого множества, обычно используемых
людьми для создания пароля. Конечно, в качестве пароля не стоит использовать
простые слова и имена. Использование программы
passwd(1)
позволяет избежать простых паролей на стадии их ввода.
Алгоритм DES имеет некоторые особенности, которые не позволяют
использовать интерфейс
crypt(3)
для того, что не связано с аутентификацией пользователя по паролю.
Если Вы планируете использовать интерфейс
crypt(3)
в криптографическом проекте, то лучше не делайте этого. Вместо этого возьмите
хорошую книгу по шифрованию или одну из общедоступных библиотек DES.
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Возвращается указатель на зашифрованный пароль.
При ошибках возвращается NULL.
НАЙДЕННЫЕ ОШИБКИ
ENOSYS
Функция
crypt
не была применена, возможно из-за запретов США на экспорт алгоритмов шифрования.
РАСШИРЕНИЯ GNU
Версия этой функции, реализованная в glibc2, имеет следующие дополнительные
возможности.
Если
salt
является строкой символов, начинающейся с "$1$", за которой идет максимум
восемь символов, и, возможно оканчивающейся "$", то, вместо использования
алгоритма шифрования DES, функцией crypt библиотеки glibc будет использован
алгоритм, основанный на MD5. Результатом работы этого алгоритма будет до 34
байтов, а именно "$1$<строка>$", где <строка> означает до 8 символов, взятых
из salt после "$1$", за которыми следует 22 байта, выбранных из набора
[a-zA-Z0-9./]. В этом случае значение имеет
весь ключ (вместо первых 8 байтов).
Программы, использующие эту функцию, должны линковаться с -lcrypt.