plucky (3) setkey_r.3.gz

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

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).

       ┌─────────────────────────────────────────────────┬────────────────────────┬─────────────────────────────┐
       │InterfejsAtrybutWartość                     │
       ├─────────────────────────────────────────────────┼────────────────────────┼─────────────────────────────┤
       │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⟩.