Provided by: manpages-pl-dev_4.25.1-1_all 

NAZWA
encrypt, setkey, encrypt_r, setkey_r - szyfruje komunikaty 64-bitowe
BIBLIOTEKA
Biblioteka szyfrowania haseł (libc, -lc)
SKŁADNIA
#define _XOPEN_SOURCE /* Patrz feature_test_macros(7) */ #include <unistd.h> [[przestarzałe]] void encrypt(char block[64], int edflag); #define _XOPEN_SOURCE /* Patrz feature_test_macros(7) */ #include <stdlib.h> [[przestarzałe]] void setkey(const char *key); #define _GNU_SOURCE /* Patrz feature_test_macros(7) */ #include <crypt.h> [[przestarzałe]] void setkey_r(const char *key, struct crypt_data *data); [[przestarzałe]] void encrypt_r(char *block, int edflag, struct crypt_data *data);
OPIS
Funkcje te szyfrują i rozszyfrowują 64-bitowe komunikaty. Funkcja setkey() ustawia klucz używany przez encrypt(). Używany tu argument key jest tablicą 64 bajtów, z których każdy ma wartość numeryczną 1 lub 0. Bajty key[n], gdzie n=8*i-1, są ignorowane tak, że efektywna długość klucza to 56 bitów. Funkcja encrypt() modyfikuje przekazany bufor, szyfrując go jeśli edflag wynosi 0 i rozszyfrowując, jeśli wynosi 1. Podobnie jak przy argumencie key również block jest reprezentacją wektora bitów rzeczywistej wartości, która jest szyfrowana. Wynik jest zwracany w tym samym wektorze. Te dwie funkcje nie są wielobieżne tj. dane klucza są przechowywane statycznie. Wariantami wielobieżnymi są funkcje setkey_r() i encrypt_r(). Używają one następującej struktury do przechowywania danych klucza: struct crypt_data { char keysched[16 * 8]; char sb0[32768]; char sb1[32768]; char sb2[32768]; char sb3[32768]; char crypt_3_buf[14]; char current_salt[2]; long current_saltbits; int direction; int initialized; }; Przed wywołaniem setkey_r() należy ustawić data->initialized na zero.
WARTOŚĆ ZWRACANA
Funkcje te nie zwracają żadnej wartości.
BŁĘDY
Należy ustawić errno na zero przed wywołaniem powyższych funkcji. W razie powodzenia, errno nie jest zmieniane. ENOSYS Funkcja nie jest dostępna (np. ze względu na dawne ograniczenia eksportowe Stanów Zjednoczonych).
ATRYBUTY
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7). ┌─────────────────────────────────────────────────┬────────────────────────┬─────────────────────────────┐ │Interfejs │ Atrybut │ Wartość │ ├─────────────────────────────────────────────────┼────────────────────────┼─────────────────────────────┤ │encrypt(), setkey() │ Bezpieczeństwo wątkowe │ MT-niebezpieczne race:crypt │ ├─────────────────────────────────────────────────┼────────────────────────┼─────────────────────────────┤ │encrypt_r(), setkey_r() │ Bezpieczeństwo wątkowe │ MT-bezpieczne │ └─────────────────────────────────────────────────┴────────────────────────┴─────────────────────────────┘
STANDARDY
encrypt() setkey() POSIX.1-2008. encrypt_r() setkey_r() Brak.
HISTORIA
Usunięte w glibc 2.28. Ze względu na korzystanie z szyfru blokowego DES, który nie jest już uważany za bezpieczny, funkcje te usunięto z glibc. Aplikacje powinny obecnie korzystać ze współczesnej biblioteki kryptograficznej, takiej jak libgcrypt. encrypt() setkey() POSIX.1-2001, SUS, SVr4. Dostępność w glibc Zobacz crypt(3). Funkcjonalność w glibc W glibc 2.2, funkcje te korzystają z algorytmu DES.
PRZYKŁADY
#define _XOPEN_SOURCE #include <crypt.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(void) { char key[64]; char orig[9] = "eggplant"; char buf[64]; char txt[9]; for (size_t i = 0; i < 64; i++) { key[i] = rand() & 1; } for (size_t i = 0; i < 8; i++) { for (size_t j = 0; j < 8; j++) { buf[i * 8 + j] = orig[i] >> j & 1; } setkey(key); } printf("Przed szyfrowaniem: %s\n", orig); encrypt(buf, 0); for (size_t i = 0; i < 8; i++) { for (size_t j = 0, txt[i] = '\0'; j < 8; j++) { txt[i] |= buf[i * 8 + j] << j; } txt[8] = '\0'; } printf("Po szyfrowaniu: %s\n", txt); encrypt(buf, 1); for (size_t i = 0; i < 8; i++) { for (size_t j = 0, txt[i] = '\0'; j < 8; j++) { txt[i] |= buf[i * 8 + j] << j; } txt[8] = '\0'; } printf("Po odszyfrowaniu: %s\n", txt); exit(EXIT_SUCCESS); }
ZOBACZ TAKŻE
cbc_crypt(3), crypt(3), ecb_crypt(3)
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl> i Michał Kułach <michal.kulach@gmail.com> Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI. Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej ⟨manpages-pl- list@lists.sourceforge.net⟩.