1998-08-10 19:42:37 +00:00
|
|
|
\section{\module{crypt} ---
|
2000-04-03 20:13:55 +00:00
|
|
|
Function to check \UNIX{} passwords}
|
1998-07-23 17:59:49 +00:00
|
|
|
|
1999-03-02 16:37:17 +00:00
|
|
|
\declaremodule{builtin}{crypt}
|
1999-03-02 17:03:42 +00:00
|
|
|
\platform{Unix}
|
2000-04-03 20:13:55 +00:00
|
|
|
\modulesynopsis{The \cfunction{crypt()} function used to check
|
|
|
|
\UNIX{} passwords.}
|
1999-03-02 16:37:17 +00:00
|
|
|
\moduleauthor{Steven D. Majewski}{sdm7g@virginia.edu}
|
|
|
|
\sectionauthor{Steven D. Majewski}{sdm7g@virginia.edu}
|
2000-04-03 20:13:55 +00:00
|
|
|
\sectionauthor{Peter Funk}{pf@artcom-gmbh.de}
|
1998-07-23 17:59:49 +00:00
|
|
|
|
1996-04-10 16:18:20 +00:00
|
|
|
|
2000-04-03 20:13:55 +00:00
|
|
|
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
|
1996-04-10 16:18:20 +00:00
|
|
|
allowing Python scripts to accept typed passwords from the user, or
|
1997-12-29 17:31:22 +00:00
|
|
|
attempting to crack \UNIX{} passwords with a dictionary.
|
1996-04-10 16:18:20 +00:00
|
|
|
|
1998-03-17 06:33:25 +00:00
|
|
|
\begin{funcdesc}{crypt}{word, salt}
|
2000-04-03 20:13:55 +00:00
|
|
|
\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).
|
1996-04-10 16:18:20 +00:00
|
|
|
\end{funcdesc}
|
|
|
|
|
2000-04-03 20:13:55 +00:00
|
|
|
|
|
|
|
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}
|