Provided by: manpages-fr-dev_4.21.0-2_all bug

NOM

       encrypt, setkey, encrypt_r, setkey_r - Crypter des messages de 64 bits

BIBLIOTHÈQUE

       Bibliothèque de chiffrement et de déchiffrement (libcrypto, -lcrypto)

SYNOPSIS

       #define _XOPEN_SOURCE       /* Consultez feature_test_macros(7) */
       #include <unistd.h>

       [[obsolète]] void encrypt(char block[64], int edflag);

       #define _XOPEN_SOURCE       /* Consultez feature_test_macros(7) */
       #include <stdlib.h>

       [[obsolète]] void setkey(const char *key);

       #define _GNU_SOURCE         /* Consultez feature_test_macros(7) */
       #include <crypt.h>

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

DESCRIPTION

       Ces fonctions chiffrent et déchiffrent des messages de 64 bits. La fonction setkey() permet de fournir la
       clef  à  utiliser  pour encrypt(). L'argument key est une table de 64 octets, chacun ayant la valeur 0 ou
        1. Les octets key[n] où n=8*i-1 sont ignorés, ce qui ramène la clef à 56 bits effectifs.

       La fonction encrypt() modifie le tampon transmis, en l'encodant si l'argument edflag vaut  0,  et  en  le
       décodant  s'il vaut 1. L'argument block est, comme l'argument key, une représentation de la valeur réelle
       à encoder sous forme de vecteur de bits. Le résultat est renvoyé dans le même vecteur.

       Ces deux fonctions ne sont pas réentrantes, c'est-à-dire que  la  clef  est  stockée  dans  une  zone  de
       stockage statique. Les fonctions setkey_r() et encrypt_r() sont des versions réentrantes. Elles utilisent
       la structure suivante pour contenir la clef :

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

       Avant d'appeler setkey_r(), définissez data->initialized à zéro.

VALEUR RENVOYÉE

       Ces routines ne renvoient pas de valeur.

ERREURS

       Définissez  errno  à  zéro avant d'appeler les fonctions ci-dessus. Si elles réussissent, errno n'est pas
       modifiée.

       ENOSYS La fonction n'est  pas  disponible.  (Par  exemple,  à  cause  des  restrictions  américaines  sur
              l'exportation de routines cryptographiques.)

VERSIONS

       Parce  qu'elles  emploient  le chiffrement par bloc DES, qui n'est plus considéré comme sûr, les routines
       encrypt(), encrypt_r(), setkey() et setkey_r() ont  été  retirées  de  la  glibc 2.28.  Les  applications
       devraient passer à une bibliothèque de chiffrement moderne telle que libgcrypt.

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).
       ┌─────────────────────────────────────────────────────────┬──────────────────────┬──────────────────────┐
       │ InterfaceAttributValeur               │
       ├─────────────────────────────────────────────────────────┼──────────────────────┼──────────────────────┤
       │ encrypt(), setkey()                                     │ Sécurité des threads │ MT-Unsafe race:crypt │
       ├─────────────────────────────────────────────────────────┼──────────────────────┼──────────────────────┤
       │ encrypt_r(), setkey_r()                                 │ Sécurité des threads │ MT-Safe              │
       └─────────────────────────────────────────────────────────┴──────────────────────┴──────────────────────┘

STANDARDS

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

       Les fonctions encrypt_r() et setkey_r() sont des extensions GNU.

NOTES

   Disponibilité dans la glibc
       Consultez crypt(3).

   Fonctionnalités dans la glibc
       Dans la glibc 2.2, ces fonctions utilisent l'algorithme DES.

EXEMPLES

       #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("Avant chiffrement : %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("Après chiffrement :  %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("Après déchiffrement :  %s\n", txt);
           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       cbc_crypt(3), crypt(3), ecb_crypt(3)

TRADUCTION

       La   traduction   française   de   cette   page   de   manuel   a   été   créée   par  Christophe  Blaess
       <https://www.blaess.fr/christophe/>, Stéphan Rafin  <stephan.rafin@laposte.net>,  Thierry  Vignaud  <tvi‐
       gnaud@mandriva.com>,  François  Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fe‐
       vrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau  <jcristau@de‐
       bian.org>,   Thomas   Huriaux   <thomas.huriaux@gmail.com>,  Nicolas  François  <nicolas.francois@centra‐
       liens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
       Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Pierre Giraud  <jean-pierre‐
       giraud@neuf.fr>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General Public License
       version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à  de‐
       bian-l10n-french@lists.debian.org.

Pages du manuel de Linux 6.03                    5 février 2023                                       encrypt(3)