1515
1616This module implements an interface to the :manpage: `crypt(3)` routine, which is
1717a one-way hash function based upon a modified DES algorithm; see the Unix man
18- page for further details. Possible uses include allowing Python scripts to
19- accept typed passwords from the user , or attempting to crack Unix passwords with
20- a dictionary.
18+ page for further details. Possible uses include storing hashed passwords
19+ so you can check passwords without storing the actual password , or attempting
20+ to crack Unix passwords with a dictionary.
2121
2222.. index :: single: crypt(3)
2323
@@ -26,22 +26,102 @@ the :manpage:`crypt(3)` routine in the running system. Therefore, any
2626extensions available on the current implementation will also be available on
2727this module.
2828
29+ Hashing Methods
30+ ---------------
2931
30- .. function :: crypt(word, salt)
32+ The :mod: `crypt ` module defines the list of hashing methods (not all methods
33+ are available on all platforms):
34+
35+ .. data :: METHOD_SHA512
36+
37+ A Modular Crypt Format method with 16 character salt and 86 character
38+ hash. This is the strongest method.
39+
40+ .. versionadded :: 3.3
41+
42+ .. data :: METHOD_SHA256
43+
44+ Another Modular Crypt Format method with 16 character salt and 43
45+ character hash.
46+
47+ .. versionadded :: 3.3
48+
49+ .. data :: METHOD_MD5
50+
51+ Another Modular Crypt Format method with 8 character salt and 22
52+ character hash.
53+
54+ .. versionadded :: 3.3
55+
56+ .. data :: METHOD_CRYPT
57+
58+ The traditional method with a 2 character salt and 13 characters of
59+ hash. This is the weakest method.
60+
61+ .. versionadded :: 3.3
62+
63+ Module Functions
64+ ----------------
65+
66+ The :mod: `crypt ` module defines the following functions:
67+
68+ .. function :: crypt(word, salt=None)
3169
3270 *word * will usually be a user's password as typed at a prompt or in a graphical
33- interface. *salt * is usually a random two-character string which will be used
34- to perturb the DES algorithm in one of 4096 ways. The characters in *salt * must
35- be in the set ``[./a-zA-Z0-9] ``. Returns the hashed password as a string, which
36- will be composed of characters from the same alphabet as the salt (the first two
37- characters represent the salt itself).
71+ interface. The optional *salt * is either a string as returned from
72+ :func: `mksalt `, one of the ``crypt.METHOD_* `` values (though not all
73+ may be available on all platforms), or a full encrypted password
74+ including salt, as returned by this function. If *salt * is not
75+ provided, the strongest method will be used (as returned by
76+ :func: `methods `.
77+
78+ Checking a password is usually done by passing the plain-text password
79+ as *word * and the full results of a previous :func: `crypt ` call,
80+ which should be the same as the results of this call.
81+
82+ *salt * (either a random 2 or 16 character string, possibly prefixed with
83+ ``$digit$ `` to indicate the method) which will be used to perturb the
84+ encryption algorithm. The characters in *salt * must be in the set
85+ ``[./a-zA-Z0-9] ``, with the exception of Modular Crypt Format which
86+ prefixes a ``$digit$ ``.
87+
88+ Returns the hashed password as a string, which will be composed of
89+ characters from the same alphabet as the salt.
3890
3991 .. index :: single: crypt(3)
4092
4193 Since a few :manpage: `crypt(3)` extensions allow different values, with
4294 different sizes in the *salt *, it is recommended to use the full crypted
4395 password as salt when checking for a password.
4496
97+ .. versionchanged :: 3.3
98+ Before version 3.3, *salt * must be specified as a string and cannot
99+ accept ``crypt.METHOD_* `` values (which don't exist anyway).
100+
101+ .. function :: methods()
102+
103+ Return a list of available password hashing algorithms, as
104+ ``crypt.METHOD_* `` objects. This list is sorted from strongest to
105+ weakest, and is guaranteed to have at least ``crypt.METHOD_CRYPT ``.
106+
107+ .. versionadded :: 3.3
108+
109+ .. function :: mksalt(method=None)
110+
111+ Return a randomly generated salt of the specified method. If no
112+ *method * is given, the strongest method available as returned by
113+ :func: `methods ` is used.
114+
115+ The return value is a string either of 2 characters in length for
116+ ``crypt.METHOD_CRYPT ``, or 19 characters starting with ``$digit$ `` and
117+ 16 random characters from the set ``[./a-zA-Z0-9] ``, suitable for
118+ passing as the *salt * argument to :func: `crypt `.
119+
120+ .. versionadded :: 3.3
121+
122+ Examples
123+ --------
124+
45125A simple example illustrating typical use::
46126
47127 import crypt, getpass, pwd
@@ -57,3 +137,11 @@ A simple example illustrating typical use::
57137 else:
58138 return 1
59139
140+ To generate a hash of a password using the strongest available method and
141+ check it against the original::
142+
143+ import crypt
144+
145+ hashed = crypt.crypt(plaintext)
146+ if hashed != crypt.crypt(plaintext, hashed):
147+ raise "Hashed version doesn't validate against original"
0 commit comments