Provided by: manpages-pl-dev_0.7-2_all bug

NAZWA

       crypt, crypt_r - szyfrowanie danych i haseł

SKŁADNIA

       #define _XOPEN_SOURCE       /* Patrz feature_test_macros(7) */
       #include <unistd.h>

       char *crypt(const char *key, const char *salt);

       #define _GNU_SOURCE         /* Patrz feature_test_macros(7) */
       #include <crypt.h>

       char *crypt_r(const char *key, const char *salt,
                     struct crypt_data *data);

       Proszę linkować z -lcrypt.

OPIS

       crypt  to funkcja szyfrująca hasła. Opiera się ona na algorytmie Data Encryption Standard,
       z pewnymi modyfikacjami mającymi (między  innymi)  zapobiec  próbom  sprzętowego  złamania
       klucza.

       Argument key to hasło wpisane przez użytkownika.

       Argument  salt  to  łańcuch  dwóch  znaków  z zestawu [a-zA-Z0-9./]. Ten łańcuch umożliwia
       kodowanie jednego hasła na 4096 różnych sposobów.

       Poprzez pobranie 7 najmniej znaczących bitów pierwszych ośmiu znaków łańcucha key tworzony
       jest  56-bitowy  klucz.  Ten  klucz  jest używany do zakodowania z góry ustalonego łańucha
       znaków (zwykle jest to łańcuch składający się z samych zer). Zwracana wartość wskazuje  na
       zaszyfrowane hasło, serię 13 znaków ASCII (pierwsze dwa znaki reprezentują argument salt).
       Zwracana wartość wskazuje na statyczną daną, która jest nadpisywana przy każdym  wywołaniu
       funkcji.

       Uwaga:  Istnieje  2**56  czyli  7.2e16,  możliwych  wartości.  Możliwe jest przeszukiwanie
       przestrzeni  kluczy  z  użyciem  komputerów  z  przetwarzaniem  równoległym.  Dostępne  są
       programy,  takie jak crack(1), przeszukujące obszar kluczy, które są często wykorzystywane
       przez ludzi jako hasła. Tak więc hasło nie powinno zawierać powszechnych wyrazów  i  nazw.
       Zalecane jest używanie programu passwd(1), który podczas zmiany lub wyboru hasła sprawdza,
       czy nie jest łatwe do złamania.

       Sam algorytm DES ma kilka wad, dlatego  crypt()  jest  złym  rozwiązaniem  dla  zastosowań
       innych  niż  autoryzacja  za  pomocą  hasła. Jeśli planujesz wykorzystać crypt() dla celów
       kryptograficznych,  nie  rób  tego.  Zdobądź  dobrą  książkę  o  szyfrowaniu  i  jedną   z
       ogólnodostępnych bibliotek DES.

       crypt_r() jest wielodostępową wersją crypt(). Struktura wskazywana przez data jest używana
       do przechowywania wyniku i różnych wewnętrznych informacji. Oprócz  przydzielenia  pamięci
       dla  tej  struktury,  funkcja  wywołująca  funkcję  crypt_r()  powinna przed jej pierwszym
       wywołanie ustawić data->initialized na zero.

WARTOŚĆ ZWRACANA

       W razie powodzenia zwracany jest wskaźnik do zaszyfrowanego hasła. W przypadku wystąpienia
       błędu, zwracana jest wartość NULL.

BŁĘDY

       EINVAL salt ma nieprawidłowy format.

       ENOSYS Funkcja   crypt()  nie  została  zaimplementowana,  prawdopodobnie  ze  względu  na
              ograniczenia eksportowe Stanów Zjednoczonych.

       EPERM  /proc/sys/crypto/fips_enabled ma niezerową wartość i próbowano  użyć  słabego  typu
              szyfrowania, takiego jak DES.

ATRYBUTY

       Informacje   o   pojęciach   używanych   w  tym  rozdziale  można  znaleźć  w  podręczniku
       attributes(7).

       ┌──────────┬────────────────────────┬──────────────────────┐
       │InterfejsAtrybutWartość              │
       ├──────────┼────────────────────────┼──────────────────────┤
       │crypt()   │ Bezpieczeństwo wątkowe │ MT-Unsafe race:crypt │
       ├──────────┼────────────────────────┼──────────────────────┤
       │crypt_r() │ Bezpieczeństwo wątkowe │ MT-Safe              │
       └──────────┴────────────────────────┴──────────────────────┘

ZGODNE Z

       crypt(): POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.  crypt_r() jest rozszerzeniem GNU.

UWAGI

   Uwagi dotyczące biblioteki glibc
       Wersja glibc2 tej funkcji obsługuje dodatkowe algorytmy szyfrowania.

       Jeśli salt jest łańcuchem znaków zaczynającym się od "$id$", po którym  następuje  kolejny
       łańcuch znaków kończący się na "$", to:

              $id$salt$encrypted

       to  zamiast  używać  DES,  id  określa  używaną  metodę  kodowania,  co wskazuje na sposób
       interpretacji pozostałej części zakodowanego hasła. Obsługiwane  są  następujące  wartości
       id:

              ID  | Metoda
              ────────────────────────────────────────────────
              1   | MD5
              2a  | Blowfish (nie w głównym glibc; dodane
                  | w kilku dystrybucjach Linuksa)
              5   | SHA-256 (od glibc 2.7)
              6   | SHA-512 (od glibc 2.7)

       Tak  więc  $5$salt$encrypted  jest  hasłem zakodowanym w SHA-256, a $6$salt$encrypted jest
       zakodowane w SHA-512

       "salt" oznacza do 16 znaków następujących po "$id$  w  haśle.  Zakodowana  część  łańcucha
       znaków hasła jest właściwym wyliczonym hasłem. Rozmiar tego łańcucha znaków jest stały:

       MD5     | 22 znaki
       SHA-256 | 43 znaki
       SHA-512 | 86 znaków

       Znaki  w "salt" i "encrypted" są losowane ze zbioru [a-zA-Z0-9./]. W implementacjach MD5 i
       SHA cały key ma znaczenie (zamiast tylko pierwszych ośmiu znaków, jak to jest w  przypadku
       DES).

ZOBACZ TAKŻE

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

O STRONIE

       Angielska  wersja  tej  strony  pochodzi  z  wydania  4.07  projektu Linux man-pages. Opis
       projektu, informacje dotyczące zgłaszania błędów oraz  najnowszą  wersję  oryginału  można
       znaleźć pod adresem https://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

       Autorami  polskiego  tłumaczenia  niniejszej  strony podręcznika man są: Adam Byrtek (PTM)
       <abyrtek@priv.onet.pl>, Andrzej Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl>, Robert Luberda
       <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>.

       Polskie  tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na
       stronie  http://sourceforge.net/projects/manpages-pl/.  Jest   zgodne   z   wersją    4.07
       oryginału.

                                            2015-08-08                                   CRYPT(3)