blob: 7a65d7d846d5be6f66c51fd4d54161d2295fd946 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001
2:mod:`hashlib` --- Secure hashes and message digests
3====================================================
4
5.. module:: hashlib
6 :synopsis: Secure hash and message digest algorithms.
7.. moduleauthor:: Gregory P. Smith <greg@users.sourceforge.net>
8.. sectionauthor:: Gregory P. Smith <greg@users.sourceforge.net>
9
10
Georg Brandl116aa622007-08-15 14:28:22 +000011.. index::
12 single: message digest, MD5
13 single: secure hash algorithm, SHA1, SHA224, SHA256, SHA384, SHA512
14
15This module implements a common interface to many different secure hash and
16message digest algorithms. Included are the FIPS secure hash algorithms SHA1,
17SHA224, SHA256, SHA384, and SHA512 (defined in FIPS 180-2) as well as RSA's MD5
Georg Brandl67ced422007-09-06 14:09:10 +000018algorithm (defined in Internet :rfc:`1321`). The terms "secure hash" and
19"message digest" are interchangeable. Older algorithms were called message
20digests. The modern term is secure hash.
Georg Brandl116aa622007-08-15 14:28:22 +000021
Christian Heimesd5e2b6f2008-03-19 21:50:51 +000022.. note::
23 If you want the adler32 or crc32 hash functions they are available in
24 the :mod:`zlib` module.
25
Georg Brandl116aa622007-08-15 14:28:22 +000026.. warning::
27
28 Some algorithms have known hash collision weaknesses, see the FAQ at the end.
29
30There is one constructor method named for each type of :dfn:`hash`. All return
31a hash object with the same simple interface. For example: use :func:`sha1` to
Georg Brandl67ced422007-09-06 14:09:10 +000032create a SHA1 hash object. You can now feed this object with objects conforming
33to the buffer interface (normally :class:`bytes` objects) using the
34:meth:`update` method. At any point you can ask it for the :dfn:`digest` of the
35concatenation of the data fed to it so far using the :meth:`digest` or
36:meth:`hexdigest` methods.
37
38.. note::
39
Antoine Pitroubcd5cbe2009-01-08 21:17:16 +000040 For better multithreading performance, the Python GIL is released for
41 strings of more than 2047 bytes at object creation or on update.
42
43.. note::
44
Georg Brandl67ced422007-09-06 14:09:10 +000045 Feeding string objects is to :meth:`update` is not supported, as hashes work
46 on bytes, not on characters.
Georg Brandl116aa622007-08-15 14:28:22 +000047
Thomas Wouters1b7f8912007-09-19 03:06:30 +000048.. index:: single: OpenSSL; (use in module hashlib)
Georg Brandl116aa622007-08-15 14:28:22 +000049
50Constructors for hash algorithms that are always present in this module are
51:func:`md5`, :func:`sha1`, :func:`sha224`, :func:`sha256`, :func:`sha384`, and
52:func:`sha512`. Additional algorithms may also be available depending upon the
53OpenSSL library that Python uses on your platform.
54
Georg Brandl67ced422007-09-06 14:09:10 +000055For example, to obtain the digest of the byte string ``b'Nobody inspects the
56spammish repetition'``::
Georg Brandl116aa622007-08-15 14:28:22 +000057
58 >>> import hashlib
59 >>> m = hashlib.md5()
Georg Brandl67ced422007-09-06 14:09:10 +000060 >>> m.update(b"Nobody inspects")
61 >>> m.update(b" the spammish repetition")
Georg Brandl116aa622007-08-15 14:28:22 +000062 >>> m.digest()
Georg Brandl67ced422007-09-06 14:09:10 +000063 b'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'
Guido van Rossuma19f80c2007-11-06 20:51:31 +000064 >>> m.digest_size
65 16
66 >>> m.block_size
67 64
Georg Brandl116aa622007-08-15 14:28:22 +000068
Christian Heimesfe337bf2008-03-23 21:54:12 +000069More condensed:
Georg Brandl116aa622007-08-15 14:28:22 +000070
Georg Brandl67ced422007-09-06 14:09:10 +000071 >>> hashlib.sha224(b"Nobody inspects the spammish repetition").hexdigest()
Benjamin Peterson0fa3f3d2008-12-29 20:52:09 +000072 'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2'
Georg Brandl116aa622007-08-15 14:28:22 +000073
74A generic :func:`new` constructor that takes the string name of the desired
75algorithm as its first parameter also exists to allow access to the above listed
76hashes as well as any other algorithms that your OpenSSL library may offer. The
77named constructors are much faster than :func:`new` and should be preferred.
78
Christian Heimesfe337bf2008-03-23 21:54:12 +000079Using :func:`new` with an algorithm provided by OpenSSL:
Georg Brandl116aa622007-08-15 14:28:22 +000080
81 >>> h = hashlib.new('ripemd160')
Georg Brandl67ced422007-09-06 14:09:10 +000082 >>> h.update(b"Nobody inspects the spammish repetition")
Georg Brandl116aa622007-08-15 14:28:22 +000083 >>> h.hexdigest()
Benjamin Peterson0fa3f3d2008-12-29 20:52:09 +000084 'cc4a5ce1b3df48aec5d22d1f16b894a0b894eccc'
Georg Brandl116aa622007-08-15 14:28:22 +000085
86The following values are provided as constant attributes of the hash objects
87returned by the constructors:
88
89
90.. data:: digest_size
91
Guido van Rossuma19f80c2007-11-06 20:51:31 +000092 The size of the resulting hash in bytes.
93
94.. data:: block_size
95
96 The internal block size of the hash algorithm in bytes.
Georg Brandl116aa622007-08-15 14:28:22 +000097
98A hash object has the following methods:
99
100
101.. method:: hash.update(arg)
102
Georg Brandl67ced422007-09-06 14:09:10 +0000103 Update the hash object with the object *arg*, which must be interpretable as
104 a buffer of bytes. Repeated calls are equivalent to a single call with the
105 concatenation of all the arguments: ``m.update(a); m.update(b)`` is
106 equivalent to ``m.update(a+b)``.
Georg Brandl116aa622007-08-15 14:28:22 +0000107
108
109.. method:: hash.digest()
110
Georg Brandl67ced422007-09-06 14:09:10 +0000111 Return the digest of the data passed to the :meth:`update` method so far.
112 This is a bytes array of size :attr:`digest_size` which may contain bytes in
113 the whole range from 0 to 255.
Georg Brandl116aa622007-08-15 14:28:22 +0000114
115
116.. method:: hash.hexdigest()
117
Georg Brandl67ced422007-09-06 14:09:10 +0000118 Like :meth:`digest` except the digest is returned as a string object of
119 double length, containing only hexadecimal digits. This may be used to
120 exchange the value safely in email or other non-binary environments.
Georg Brandl116aa622007-08-15 14:28:22 +0000121
122
123.. method:: hash.copy()
124
125 Return a copy ("clone") of the hash object. This can be used to efficiently
Georg Brandl67ced422007-09-06 14:09:10 +0000126 compute the digests of data sharing a common initial substring.
Georg Brandl116aa622007-08-15 14:28:22 +0000127
128
129.. seealso::
130
131 Module :mod:`hmac`
132 A module to generate message authentication codes using hashes.
133
134 Module :mod:`base64`
135 Another way to encode binary hashes for non-binary environments.
136
137 http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf
138 The FIPS 180-2 publication on Secure Hash Algorithms.
139
140 http://www.cryptography.com/cnews/hash.html
141 Hash Collision FAQ with information on which algorithms have known issues and
142 what that means regarding their use.
143