Fred Drake | 295da24 | 1998-08-10 19:42:37 +0000 | [diff] [blame] | 1 | \section{\module{crypt} --- |
Fred Drake | 38e5d27 | 2000-04-03 20:13:55 +0000 | [diff] [blame] | 2 | Function to check \UNIX{} passwords} |
Fred Drake | b91e934 | 1998-07-23 17:59:49 +0000 | [diff] [blame] | 3 | |
Fred Drake | f6863c1 | 1999-03-02 16:37:17 +0000 | [diff] [blame] | 4 | \declaremodule{builtin}{crypt} |
Fred Drake | a54a887 | 1999-03-02 17:03:42 +0000 | [diff] [blame] | 5 | \platform{Unix} |
Fred Drake | 38e5d27 | 2000-04-03 20:13:55 +0000 | [diff] [blame] | 6 | \modulesynopsis{The \cfunction{crypt()} function used to check |
Fred Drake | c116b82 | 2001-05-09 15:50:17 +0000 | [diff] [blame] | 7 | \UNIX\ passwords.} |
Fred Drake | f6863c1 | 1999-03-02 16:37:17 +0000 | [diff] [blame] | 8 | \moduleauthor{Steven D. Majewski}{sdm7g@virginia.edu} |
| 9 | \sectionauthor{Steven D. Majewski}{sdm7g@virginia.edu} |
Fred Drake | 38e5d27 | 2000-04-03 20:13:55 +0000 | [diff] [blame] | 10 | \sectionauthor{Peter Funk}{pf@artcom-gmbh.de} |
Fred Drake | b91e934 | 1998-07-23 17:59:49 +0000 | [diff] [blame] | 11 | |
Guido van Rossum | 5c6e373 | 1996-04-10 16:18:20 +0000 | [diff] [blame] | 12 | |
Fred Drake | 38e5d27 | 2000-04-03 20:13:55 +0000 | [diff] [blame] | 13 | This module implements an interface to the |
| 14 | \manpage{crypt}{3}\index{crypt(3)} routine, which is a one-way hash |
| 15 | function based upon a modified DES\indexii{cipher}{DES} algorithm; see |
| 16 | the \UNIX{} man page for further details. Possible uses include |
Guido van Rossum | 5c6e373 | 1996-04-10 16:18:20 +0000 | [diff] [blame] | 17 | allowing Python scripts to accept typed passwords from the user, or |
Fred Drake | f086731 | 1997-12-29 17:31:22 +0000 | [diff] [blame] | 18 | attempting to crack \UNIX{} passwords with a dictionary. |
Guido van Rossum | 5c6e373 | 1996-04-10 16:18:20 +0000 | [diff] [blame] | 19 | |
Fred Drake | cce1090 | 1998-03-17 06:33:25 +0000 | [diff] [blame] | 20 | \begin{funcdesc}{crypt}{word, salt} |
Fred Drake | 38e5d27 | 2000-04-03 20:13:55 +0000 | [diff] [blame] | 21 | \var{word} will usually be a user's password as typed at a prompt or |
| 22 | in a graphical interface. \var{salt} is usually a random |
| 23 | two-character string which will be used to perturb the DES algorithm |
| 24 | in one of 4096 ways. The characters in \var{salt} must be in the |
| 25 | set \regexp{[./a-zA-Z0-9]}. Returns the hashed password as a |
| 26 | string, which will be composed of characters from the same alphabet |
| 27 | as the salt (the first two characters represent the salt itself). |
Guido van Rossum | 5c6e373 | 1996-04-10 16:18:20 +0000 | [diff] [blame] | 28 | \end{funcdesc} |
| 29 | |
Fred Drake | 38e5d27 | 2000-04-03 20:13:55 +0000 | [diff] [blame] | 30 | |
| 31 | A simple example illustrating typical use: |
| 32 | |
| 33 | \begin{verbatim} |
| 34 | import crypt, getpass, pwd |
| 35 | |
| 36 | def login(): |
| 37 | username = raw_input('Python login:') |
| 38 | cryptedpasswd = pwd.getpwnam(username)[1] |
| 39 | if cryptedpasswd: |
| 40 | if cryptedpasswd == 'x' or cryptedpasswd == '*': |
| 41 | raise "Sorry, currently no support for shadow passwords" |
| 42 | cleartext = getpass.getpass() |
| 43 | return crypt.crypt(cleartext, cryptedpasswd[:2]) == cryptedpasswd |
| 44 | else: |
| 45 | return 1 |
| 46 | \end{verbatim} |