encrypt

ENCRYPT(3)      Ð ÑководÑÑво пÑогÑаммиÑÑа Linux      ENCRYPT(3)



ÐÐЯ
       encrypt, setkey, encrypt_r, setkey_r - ÑиÑÑование 64-биÑнÑÑ
       ÑообÑений

ÐÐÐÐÐ
       #define _XOPEN_SOURCE /* См. feature_test_macros(7) */
       #include <unistd.h>

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

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

       void setkey(const char *key);

       #define _GNU_SOURCE /* ÑмоÑÑиÑе feature_test_macros(7) */
       #include <crypt.h>

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

       ÐÐ»Ñ Ð»Ñбой ÑÑнкÑии ÑÑебÑеÑÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ
       паÑамеÑÑом -lcrypt.

ÐÐÐСÐÐÐÐ
       ÐÑи ÑÑнкÑии кодиÑÑÑÑ Ð¸ декодиÑÑÑÑ 64-биÑнÑе
       ÑообÑениÑ. ФÑнкÑией setkey() задаÑÑÑÑ ÐºÐ»ÑÑ,
       коÑоÑÑй заÑем иÑполÑзÑеÑÑÑ encrypt(). ÐаÑамеÑÑ key
       ÑвлÑеÑÑÑ Ð¼Ð°ÑÑивом из 64 байÑов, каждÑй из
       коÑоÑÑÑ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение 1 или 0. ÐайÑÑ key[n], где
       n=8*i-1 â игноÑиÑÑÑÑÑÑ, Ñак ÑÑо дейÑÑвиÑелÑнаÑ
       длина клÑÑа Ñавна 56 биÑам.

       ФÑнкÑÐ¸Ñ encrypt() изменÑÐµÑ Ð¿ÐµÑеданнÑй бÑÑÐµÑ Ð¸,
       еÑли знаÑение edflag Ñавно 0, Ñо кодиÑÑÐµÑ ÐµÐ³Ð¾,
       а еÑли Ñавно 1 â Ñо декодиÑÑеÑ. Ðак и паÑамеÑÑ
       key, аÑгÑÐ¼ÐµÐ½Ñ block Ñакже ÑвлÑеÑÑÑ
       пÑедÑÑавлением биÑового векÑоÑа
       дейÑÑвиÑелÑного кодиÑÑемого знаÑениÑ.
       РезÑлÑÑÐ°Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑÑÑ Ð² ÑÑом же векÑоÑе.

       ÐÑи две ÑÑнкÑии не ÑвлÑÑÑÑÑ Ð¿Ð¾Ð²ÑоÑно
       иÑполÑзÑемÑми, Ñо еÑÑÑ Ð´Ð°Ð½Ð½Ñе клÑÑа ÑÑанÑÑÑÑ Ð²
       ÑÑаÑиÑеÑком ÑÑанилиÑе. ФÑнкÑии setkey_r() и
       encrypt_r() ÑвлÑÑÑÑÑ Ð¿Ð¾Ð²ÑоÑно иÑполÑзÑемÑми
       веÑÑиÑми. Ðни иÑполÑзÑÑÑ ÑледÑÑÑÑÑ ÑÑÑÑкÑÑÑÑ Ð´Ð»Ñ
       ÑÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ ÐºÐ»ÑÑа:

           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 int current_saltbits;
               int      direction;
               int      initialized;
           };

       ÐеÑед вÑзовом setkey_r() обнÑлиÑе data->initialized.

ÐÐÐÐÐ ÐЩÐÐÐÐÐ ÐÐÐЧÐÐÐÐ
       ÐаннÑе ÑÑнкÑии не возвÑаÑаÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ
       знаÑений.

ÐШÐÐÐÐ
       УÑÑановиÑе пеÑеменнÑÑ errno в Ð½Ð¾Ð»Ñ Ð¿ÐµÑед
       вÑзовом ÑÑÐ¸Ñ ÑÑнкÑий. ÐÑи ноÑмалÑном
       завеÑÑении ÑабоÑÑ ÐµÑ Ð·Ð½Ð°Ñение не измениÑÑÑ.

       ENOSYS ФÑнкÑÐ¸Ñ Ð½Ðµ пÑедÑÑмоÑÑена (напÑимеÑ,
              из-за ÑÑаÑÑÑ Ð·Ð°Ð¿ÑеÑов СШРна ÑкÑпоÑÑ).

ÐТРÐÐУТЫ
       ÐпиÑание ÑеÑминов данного Ñаздела ÑмоÑÑиÑе
       в attributes(7).

       ┌────────────────────────┬────────────────────────────────┬──────────────────────┐
       │ÐнÑеÑÑÐµÐ¹Ñ           ÐÑÑибÑÑ                      ÐнаÑение       │
       ├────────────────────────┼────────────────────────────────┼──────────────────────┤
       │encrypt(), setkey()     │ ÐезвÑедноÑÑÑ Ð² ниÑÑÑ │ MT-Unsafe race:crypt │
       ├────────────────────────┼────────────────────────────────┼──────────────────────┤
       │encrypt_r(), setkey_r() │ ÐезвÑедноÑÑÑ Ð² ниÑÑÑ │ MT-Safe              │
       └────────────────────────┴────────────────────────────────┴──────────────────────┘
СÐÐТÐÐТСТÐÐРСТÐÐÐÐРТÐÐ
       encrypt(), setkey(): POSIX.1-2001, POSIX.1-2008, SUS, SVr4.

       ФÑнкÑии encrypt_r() и setkey_r() ÑвлÑÑÑÑÑ ÑаÑÑиÑениÑми
       GNU.

ÐÐÐÐЧÐÐÐЯ
       Ð glibc 2.2 в даннÑÑ ÑÑнкÑиÑÑ Ð¸ÑполÑзÑеÑÑÑ Ð°Ð»Ð³Ð¾ÑиÑм
       DES.

ÐÐ ÐÐÐÐ
       #define _XOPEN_SOURCE
       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>
       #include <crypt.h>

       int
       main(void)
       {
           char key[64];
           char orig[9] = "eggplant";
           char buf[64];
           char txt[9];
           int i, j;

           for (i = 0; i < 64; i++) {
               key[i] = rand() & 1;
           }

           for (i = 0; i < 8; i++) {
               for (j = 0; j < 8; j++) {
                   buf[i * 8 + j] = orig[i] >> j & 1;
               }
               setkey(key);
           }
           printf("Ðо ÑиÑÑованиÑ: %s\n", orig);

           encrypt(buf, 0);
           for (i = 0; i < 8; i++) {
               for (j = 0, txt[i] = '\0'; j < 8; j++) {
                   txt[i] |= buf[i * 8 + j] << j;
               }
               txt[8] = '\0';
           }
           printf("ÐоÑле ÑиÑÑованиÑ:  %s\n", txt);

           encrypt(buf, 1);
           for (i = 0; i < 8; i++) {
               for (j = 0, txt[i] = '\0'; j < 8; j++) {
                   txt[i] |= buf[i * 8 + j] << j;
               }
               txt[8] = '\0';
           }
           printf("ÐоÑле ÑаÑÑиÑÑовки:  %s\n", txt);
           exit(EXIT_SUCCESS);
       }

СÐÐТРÐТРТÐÐÐÐ
       cbc_crypt(3), crypt(3), ecb_crypt(3),



                                  2015-08-08                        ENCRYPT(3)