table of contents
- bookworm-backports 4.24.0-2~bpo12+1
- testing 4.24.0-2
- unstable 4.24.0-2
encrypt(3) | Library Functions Manual | encrypt(3) |
NUME¶
encrypt, setkey, encrypt_r, setkey_r - criptează mesaje pe 64 de biți
BIBLIOTECA¶
Biblioteca de criptare și decriptare (libcrypto, -lcrypto)
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).
VERSIUNI¶
Deoarece utilizează cifrul bloc DES, care nu mai este considerat sigur, encrypt(), encrypt_r(), setkey() și setkey_r() au fost eliminate în glibc 2.28. Aplicațiile ar trebui să treacă la o bibliotecă de criptografie modernă, cum ar fi libgcrypt.
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-2001, POSIX.1-2008, SUS, SVr4.
Funcțiile encrypt_r() și setkey_r() sunt extensii GNU.
NOTE¶
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¶
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 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.
5 februarie 2023 | Pagini de manual de Linux 6.03 |