НАЗВА

crypt - шифрує гасло та дані

СТИСЛО

**#define _XOPEN_SOURCE** 

**#include <unistd.h>** 

**char *crypt(const char ***_key_**, const char ***_salt_**);** 

ОПИС

crypt - це функція шифрування гасла. Її основано на алгоритмі DES (Data Encryption Standard) з можливістю різноманітних варіацій (поряд з іншими речами) для того, щоб ускладнити використання апаратного втілення пошуку ключа.

key - це введене користувачем гасло.

salt - це ланцюжок з двох знаків з набору [a-zA-Z0-9./]. Цей ланцюжок використовується, щоб змішати алгоритм в 4096 різноманітних способів.

Якщо взати молодші 7 бітів кожного з перших восьми знаків ключа key, можна отримати 56-бітний ключ. Цей 56-бітний ключ використовується для повторного шифрування сталого ланцюжка (як правило, ланцюжка, що складається з самих нулів). Повернене значення буде покажчиком на зашифроване гасло - набору з 13-и друковних знаків ASCII (перші два знаки представляють самий ланцюжок salt). Повернене значення вказує на статичні дані, чий зміст буде перезаписано кожним новим викликом crypt.

Попередження: кількість ключів складає 256, рівне 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-и знаків, що слідують за "$1$" у salt, за якими слідує 22 байти з набору [a-zA-Z0-9./]. Цього разу, значення цілого ключа є важливим (а не тільки перші 8 байтів).

Приграми, які використовують цю функцію, повинні зв'язуватись за допомогою -lcrypt.

ПРИКЛАД

    #include <stdio.h>
    #include <unistd.h>

    #define _XOPEN_SOURCE

    int main()
    {
        char *key = "potato";
        const char *salt = "$1$couch$";

        printf("%s\n", crypt(key, salt));
        return 0;
    }

ВІДПОВІДНІСТЬ СТАНДАРТАМ

SVID, X/OPEN, BSD 4.3, POSIX 1003.1-2001

ДИВІТЬСЯ ТАКОЖ

login(1), passwd(1), ?encrypt(3), ?getpass(3), ?passwd(5)