encrypt(3)

NUME
encrypt, setkey, encrypt_r, setkey_r - criptează mesaje pe 64 de biți

BIBLIOTECA
Biblioteca de criptare a parolelor (libcrypt, -lcrypt)

SINOPSIS
#define _XOPEN_SOURCE       /* Consultați feature_test_macros(7) */
#include <unistd.h>

[[depreciat]] void encrypt(char block[64], int edflag);

#define _XOPEN_SOURCE       /* Consultați feature_test_macros(7) */
#include <stdlib.h>

[[depreciat]] void setkey(const char *key);

#define _GNU_SOURCE         /* Consultați feature_test_macros(7) */
#include <crypt.h>

[[depreciat]] void setkey_r(const char *key, struct crypt_data *data);
[[depreciat]] void encrypt_r(char *block, int edflag,
                              struct crypt_data *data);

DESCRIERE
Aceste funcții criptează și decriptează mesaje pe 64 de biți. Funcția setkey() stabilește cheia utilizată de encrypt(). Argumentul key utilizat aici este o matrice de 64 de octeți, fiecare dintre aceștia având valoarea numerică 1 sau 0. Octeții key[n] unde n=8*i-1 sunt ignorați, astfel încât lungimea efectivă a cheii este de 56 de biți.

Funcția encrypt() modifică memoria tampon transmisă, codificând dacă edflag este 0 și decodificând dacă este transmis 1. Ca și argumentul key, de asemenea block este o reprezentare vectorială de biți a valorii reale care este codificată. Rezultatul este returnat în același vector.

Aceste două funcții nu sunt reentrante, adică datele cheie sunt păstrate în memoria statică. Funcțiile setkey_r() și encrypt_r() sunt versiunile reentrante. Acestea utilizează următoarea structură pentru a păstra datele cheii:

    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;
    };

Înainte de a apela setkey_r() stabilește data->initialized la zero.

VALOAREA RETURNATĂ
Aceste funcții nu returnează nicio valoare.

ERORI-IEȘIRE
Stabilește errno la zero înainte de a apela funcțiile de mai sus. În caz de succes, errno rămâne neschimbată.

ENOSYS
    Funcția nu este furnizată; (de exemplu, din cauza fostelor restricții de export din SUA).

ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare
encrypt(), setkey() | Siguranța firelor | MT-Unsafe race:crypt
encrypt_r(), setkey_r() | Siguranța firelor | MT-Safe

STANDARDE

encrypt()
setkey()
    POSIX.1-2008.

encrypt_r()
setkey_r()
    Niciunul.

ISTORIC
Eliminată în glibc 2.28.

Deoarece acestea utilizează cifrul bloc DES, care nu mai este considerat sigur, aceste funcții au fost eliminate. Aplicațiile ar trebui să treacă la o bibliotecă de criptografie modernă, cum ar fi libgcrypt.

encrypt()
setkey()
    POSIX.1-2001, SUS, SVr4.

  Disponibilitate în glibc
Consultați crypt(3).

  Caracteristici în glibc
În glibc 2.2, aceste funcții utilizează algoritmul DES.

EXEMPLE
    #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("Înainte de criptare: %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("După criptare:  %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("După decriptare:  %s\n", txt);
        exit(EXIT_SUCCESS);
    }

CONSULTAȚI ȘI
cbc_crypt(3), crypt(3), ecb_crypt(3)

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.