Hash a password


#include <unistd.h>

char * crypt( const char * key, 
              const char * salt );


A NUL-terminated string (normally a password typed by a user).
One of the following strings:
  • A string of at least two characters that represents the salt, where the first character is not @ (at sign). If this format is used, crypt() returns the result of a call to r_crypt(), which uses the older DES implementation for hashing.
  • A string that uses the format @digest@X@salt or @digest,iterations@X@salt, which specifies the standard PBKDF2 implementation and where:
    • digest is either S (use SHA512 digest) or s (use SHA256 digest).
    • iterations is an optional value that follows the digest character and a comma that specifies an iterations value to use instead of the default value used in PBKDF2 (4096).
    • salt is the Base64-encoded salt value.
    For example:



Use the -l login option to qcc to link against this library.

Note: We've deprecated the version of this function in libc. You should link against liblogin if your application authenticates users against the /etc/passwd and /etc/shadow files.


The crypt() function hashes a password. It's based on the Data Encryption Standard algorithm, and also includes code to deter key search attempts.

Note: This function checks only the first eight characters of key.

The algorithm obtains a 56-bit key by taking the lowest 7 bits of the first eight characters of key. The 56-bit key is used to repeatedly hash a constant string (usually all zeroes).

For license information, see Licensing information in Typographical Conventions, Support, and Licensing.


A pointer to the 13-character hashed value, or NULL on failure. The first two characters of the hashed value are the salt itself.

Note: The return value points to static data that's overwritten by each call to crypt().


POSIX 1003.1 XSI

Cancellation point No
Interrupt handler No
Signal handler No
Thread No