encrypt(3) Library Functions Manual encrypt(3) NAZWA encrypt, setkey, encrypt_r, setkey_r - szyfruje komunikaty 64-bitowe BIBLIOTEKA Biblioteka szyfrowania hasel (libc, -lc) SKLADNIA #define _XOPEN_SOURCE /* Patrz feature_test_macros(7) */ #include [[przestarzale]] void encrypt(char block[64], int edflag); #define _XOPEN_SOURCE /* Patrz feature_test_macros(7) */ #include [[przestarzale]] void setkey(const char *key); #define _GNU_SOURCE /* Patrz feature_test_macros(7) */ #include [[przestarzale]] void setkey_r(const char *key, struct crypt_data *data); [[przestarzale]] void encrypt_r(char *block, int edflag, struct crypt_data *data); OPIS Funkcje te szyfruja i rozszyfrowuja 64-bitowe komunikaty. Funkcja setkey() ustawia klucz uzywany przez encrypt(). Uzywany tu argument key jest tablica 64 bajtow, z ktorych kazdy ma wartosc numeryczna 1 lub 0. Bajty key[n], gdzie n=8*i-1, sa ignorowane tak, ze efektywna dlugosc klucza to 56 bitow. Funkcja encrypt() modyfikuje przekazany bufor, szyfrujac go jesli edflag wynosi 0 i rozszyfrowujac, jesli wynosi 1. Podobnie jak przy argumencie key rowniez block jest reprezentacja wektora bitow rzeczywistej wartosci, ktora jest szyfrowana. Wynik jest zwracany w tym samym wektorze. Te dwie funkcje nie sa wielobiezne tj. dane klucza sa przechowywane statycznie. Wariantami wielobieznymi sa funkcje setkey_r() i encrypt_r(). Uzywaja one nastepujacej 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 wywolaniem setkey_r() nalezy ustawic data->initialized na zero. WARTOSC ZWRACANA Funkcje te nie zwracaja zadnej wartosci. BLEDY Nalezy ustawic errno na zero przed wywolaniem powyzszych funkcji. W razie powodzenia, errno nie jest zmieniane. ENOSYS Funkcja nie jest dostepna (np. ze wzgledu na dawne ograniczenia eksportowe Stanow Zjednoczonych). ATRYBUTY Informacje o pojeciach uzywanych w tym rozdziale mozna znalezc w podreczniku attributes(7). +-------------+--------------------------+-----------------------------+ |Interfejs | Atrybut | Wartosc | +-------------+--------------------------+-----------------------------+ |encrypt(), | Bezpieczenstwo watkowe | MT-niebezpieczne race:crypt | |setkey() | | | +-------------+--------------------------+-----------------------------+ |encrypt_r(), | Bezpieczenstwo watkowe | MT-bezpieczne | |setkey_r() | | | +-------------+--------------------------+-----------------------------+ STANDARDY encrypt() setkey() POSIX.1-2008. encrypt_r() setkey_r() Brak. HISTORIA Usuniete w glibc 2.28. Ze wzgledu na korzystanie z szyfru blokowego DES, ktory nie jest juz uwazany za bezpieczny, funkcje te usunieto z glibc. Aplikacje powinny obecnie korzystac ze wspolczesnej biblioteki kryptograficznej, takiej jak libgcrypt. encrypt() setkey() POSIX.1-2001, SUS, SVr4. Dostepnosc w glibc Zobacz crypt(3). Funkcjonalnosc w glibc W glibc 2.2, funkcje te korzystaja z algorytmu DES. PRZYKLADY #define _XOPEN_SOURCE #include #include #include #include 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("Before encrypting: %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("After encrypting: %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("After decrypting: %s\n", txt); exit(EXIT_SUCCESS); } ZOBACZ TAKZE cbc_crypt(3), crypt(3), ecb_crypt(3) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Andrzej Krzysztofowicz i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.9.1 15 czerwca 2024 r. encrypt(3)