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

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).
┌───────────┬────────────────────────┬──────────────────────┐
│ Interfejs │ Atrybut │ Wartość │
├───────────┼────────────────────────┼──────────────────────┤
│ 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)