加密与解密 - encrypt & decrypt

加密和解密。可以使用 libcrypt 库。

crypt

  • crypt() is the password encryption function.
  • Link with -lcrypt
char *crypt(const char *key, const char *salt);

encrypt

  • encrypt and decrypt 64-bit messages.
void setkey(const char *key);
void encrypt(char block[64], int edflag);

#define decrypt(block) encrypt(block, 1)

Thread Safe crypt_r and encrypt_r

char *crypt_r(const char *key, const char *salt,
                     struct crypt_data *data);

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

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

libcrypt.a

  • nm - list symbols from object files
nm -C /usr/lib/libcrypt.a | grep ' [TW] '
000003b0 T crypt
00000000 T __crypt_r
00000000 W crypt_r
000003b0 W fcrypt
000008b0 T __md5_crypt
00000000 T __md5_crypt_r
00001080 T __sha256_crypt
00000000 T __sha256_crypt_r
000017f0 T __sha512_crypt
00000000 T __sha512_crypt_r
00000000 T _ufc_doit_r
00000e80 T encrypt
00000c50 T __encrypt_r
00000c50 W encrypt_r
00000490 T __init_des
00000000 T __init_des_r
00000f20 T setkey
00000eb0 T __setkey_r
00000eb0 W setkey_r
000008c0 T _ufc_dofinalperm_r
00000730 T _ufc_mk_keytab_r
00000a90 T _ufc_output_conversion_r
000004b0 T _ufc_setup_salt_r