CRYPT(3)

NAME
crypt, setkey, encrypt, - simple encryption

SYNOPSIS
#include <unistd.h>

char *crypt (const char *key, const char *salt);
int setkey (char *key);
int encrypt (char *block, int flag);

DESCRIPTION
The crypt function performs password encryption. It is derived from an algorithm given in Computer Networks by Andy Tanenbaum.

The first argument to crypt (key) is a NULL-terminated string (normally a password typed by a user). The second, salt, is a two-character array that should be randomly generated by the caller in the case of encrypting a new password, or should be taken as the first two characters of the /etc/passwd password entry in the case of validating a password.

The functions, encrypt and setkey allow limited access to the encryption algorithm itself. The key argument to setkey is a 64 character array of binary values (numeric 0 or 1). A 56-bit key is derived from this array by dividing the array into groups of 8 and ignoring the last bit in each group.

The encrypt argument block is also a 64 character array of binary values. If the value of flag is 0, the argument block is encrypted, otherwise it is decrypted. The encryption or decryption is returned in the original array block after using the key specified by setkey to process it.

The function crypt returns a pointer to the encrypted value (which is formatted as printable ASCII characters) on success and NULL on failure. The functions setkey and encrypt return 0 on success and 1 on failure.

Use of these routines requires linking with the libcrypt library.

SEE ALSO
login(1), passwd(1), getpass(3), passwd(5)

    Mathematical Cryptology for Computer Scientists and Mathematicians by Wayne Patterson. 1987. Volume ISBN 0-8476-7438-X.

    Password Security: A Case History by R. Morris, Ken Thompson. Communications of the ACM, vol. 22, pp. 594-597. November 1979.

    DES will be Totally Insecure within Ten Years by M.E. Hellman. IEEE Spectrum, vol. 16, pp. 32-39. July 1979.

BUGS
The crypt function leaves its result in an internal static object and returns a pointer to that object. Subsequent calls to crypt will modify the same object.