encrypt(3) Library Functions Manual encrypt(3) encrypt, setkey, encrypt_r, setkey_r - 64 (libcrypt -lcrypt) #define _XOPEN_SOURCE /* feature_test_macros(7) */ #include [[deprecated]] void encrypt(char block[64], int edflag); #define _XOPEN_SOURCE /* See feature_test_macros(7) */ #include [[deprecated]] void setkey(const char *key); #define _GNU_SOURCE /* See feature_test_macros(7) */ #include [[deprecated]] void setkey_r(const char *key, struct crypt_data *data); [[deprecated]] void encrypt_r(char *block, int edflag, struct crypt_data *data); 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 current_saltbits; int direction; int initialized; }; setkey_r() data->initialized . . errno . errno . ENOSYS . ( .) attributes(7). +----------------------+------------------------------------+------------------------------------------------------------------------------------------------------+ | | | | +----------------------+------------------------------------+------------------------------------------------------------------------------------------------------+ |encrypt(), setkey() | | (MT-Unsafe) :crypt | +----------------------+------------------------------------+------------------------------------------------------------------------------------------------------+ |encrypt_r(), | | MT-Safe | |setkey_r() | | | +----------------------+------------------------------------+------------------------------------------------------------------------------------------------------+ encrypt() setkey() POSIX.1-2008. encrypt_r() setkey_r() . glibc 2.28. DES glibc. libgcrypt. encrypt() setkey() POSIX.1-2001 SUS SVr4. glibc crypt(3). glibc glibc 2.2 DES. #define _XOPEN_SOURCE #include #include #include #include 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("Before encrypting: %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("After encrypting: %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("After decrypting: %s\n", txt); exit(EXIT_SUCCESS); } cbc_crypt(3) crypt(3) ecb_crypt(3) 3 . . : . 6.18 8 2026 encrypt(3)