| \section{\module{crypt} --- | 
 |          Function to check \UNIX{} passwords} | 
 |  | 
 | \declaremodule{builtin}{crypt} | 
 |   \platform{Unix} | 
 | \modulesynopsis{The \cfunction{crypt()} function used to check | 
 |   \UNIX\ passwords.} | 
 | \moduleauthor{Steven D. Majewski}{sdm7g@virginia.edu} | 
 | \sectionauthor{Steven D. Majewski}{sdm7g@virginia.edu} | 
 | \sectionauthor{Peter Funk}{pf@artcom-gmbh.de} | 
 |  | 
 |  | 
 | This module implements an interface to the | 
 | \manpage{crypt}{3}\index{crypt(3)} routine, which is a one-way hash | 
 | function based upon a modified DES\indexii{cipher}{DES} algorithm; see | 
 | the \UNIX{} man page for further details.  Possible uses include | 
 | allowing Python scripts to accept typed passwords from the user, or | 
 | attempting to crack \UNIX{} passwords with a dictionary. | 
 |  | 
 | \begin{funcdesc}{crypt}{word, salt}  | 
 |   \var{word} will usually be a user's password as typed at a prompt or  | 
 |   in a graphical interface.  \var{salt} is usually a random | 
 |   two-character string which will be used to perturb the DES algorithm | 
 |   in one of 4096 ways.  The characters in \var{salt} must be in the | 
 |   set \regexp{[./a-zA-Z0-9]}.  Returns the hashed password as a | 
 |   string, which will be composed of characters from the same alphabet | 
 |    as the salt (the first two characters represent the salt itself). | 
 | \end{funcdesc} | 
 |  | 
 |  | 
 | A simple example illustrating typical use: | 
 |  | 
 | \begin{verbatim} | 
 | import crypt, getpass, pwd | 
 |  | 
 | def login(): | 
 |     username = raw_input('Python login:') | 
 |     cryptedpasswd = pwd.getpwnam(username)[1] | 
 |     if cryptedpasswd: | 
 |         if cryptedpasswd == 'x' or cryptedpasswd == '*':  | 
 |             raise "Sorry, currently no support for shadow passwords" | 
 |         cleartext = getpass.getpass() | 
 |         return crypt.crypt(cleartext, cryptedpasswd[:2]) == cryptedpasswd | 
 |     else: | 
 |         return 1 | 
 | \end{verbatim} |