blob: 49fedec91076f6c865d3b68db886c465b8cb30e1 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`hashlib` --- Secure hashes and message digests
2====================================================
3
4.. module:: hashlib
5 :synopsis: Secure hash and message digest algorithms.
Benjamin Peterson058e31e2009-01-16 03:54:08 +00006.. moduleauthor:: Gregory P. Smith <greg@krypto.org>
7.. sectionauthor:: Gregory P. Smith <greg@krypto.org>
Georg Brandl116aa622007-08-15 14:28:22 +00008
9
Georg Brandl116aa622007-08-15 14:28:22 +000010.. index::
11 single: message digest, MD5
12 single: secure hash algorithm, SHA1, SHA224, SHA256, SHA384, SHA512
13
Raymond Hettinger469271d2011-01-27 20:38:46 +000014**Source code:** :source:`Lib/hashlib.py`
15
16--------------
17
Georg Brandl116aa622007-08-15 14:28:22 +000018This module implements a common interface to many different secure hash and
19message digest algorithms. Included are the FIPS secure hash algorithms SHA1,
20SHA224, SHA256, SHA384, and SHA512 (defined in FIPS 180-2) as well as RSA's MD5
Georg Brandl67ced422007-09-06 14:09:10 +000021algorithm (defined in Internet :rfc:`1321`). The terms "secure hash" and
22"message digest" are interchangeable. Older algorithms were called message
23digests. The modern term is secure hash.
Georg Brandl116aa622007-08-15 14:28:22 +000024
Christian Heimesd5e2b6f2008-03-19 21:50:51 +000025.. note::
Georg Brandl6e94a302013-10-06 18:26:36 +020026
27 If you want the adler32 or crc32 hash functions, they are available in
Christian Heimesd5e2b6f2008-03-19 21:50:51 +000028 the :mod:`zlib` module.
29
Georg Brandl116aa622007-08-15 14:28:22 +000030.. warning::
31
Georg Brandl6e94a302013-10-06 18:26:36 +020032 Some algorithms have known hash collision weaknesses, refer to the "See
33 also" section at the end.
Georg Brandl116aa622007-08-15 14:28:22 +000034
35There is one constructor method named for each type of :dfn:`hash`. All return
36a hash object with the same simple interface. For example: use :func:`sha1` to
Ezio Melottic228e962013-05-04 18:06:34 +030037create a SHA1 hash object. You can now feed this object with :term:`bytes-like
38object`\ s (normally :class:`bytes`) using the :meth:`update` method.
39At any point you can ask it for the :dfn:`digest` of the
Georg Brandl67ced422007-09-06 14:09:10 +000040concatenation of the data fed to it so far using the :meth:`digest` or
41:meth:`hexdigest` methods.
42
43.. note::
44
Benjamin Peterson9cb7bd22012-12-20 20:24:37 -060045 For better multithreading performance, the Python :term:`GIL` is released for
Jesus Cea5b22dd82013-10-04 04:20:37 +020046 data larger than 2047 bytes at object creation or on update.
Antoine Pitroubcd5cbe2009-01-08 21:17:16 +000047
48.. note::
49
Benjamin Petersonbd584d52012-12-20 20:22:47 -060050 Feeding string objects into :meth:`update` is not supported, as hashes work
Georg Brandl67ced422007-09-06 14:09:10 +000051 on bytes, not on characters.
Georg Brandl116aa622007-08-15 14:28:22 +000052
Thomas Wouters1b7f8912007-09-19 03:06:30 +000053.. index:: single: OpenSSL; (use in module hashlib)
Georg Brandl116aa622007-08-15 14:28:22 +000054
55Constructors for hash algorithms that are always present in this module are
56:func:`md5`, :func:`sha1`, :func:`sha224`, :func:`sha256`, :func:`sha384`, and
57:func:`sha512`. Additional algorithms may also be available depending upon the
58OpenSSL library that Python uses on your platform.
59
Georg Brandl67ced422007-09-06 14:09:10 +000060For example, to obtain the digest of the byte string ``b'Nobody inspects the
61spammish repetition'``::
Georg Brandl116aa622007-08-15 14:28:22 +000062
63 >>> import hashlib
64 >>> m = hashlib.md5()
Georg Brandl67ced422007-09-06 14:09:10 +000065 >>> m.update(b"Nobody inspects")
66 >>> m.update(b" the spammish repetition")
Georg Brandl116aa622007-08-15 14:28:22 +000067 >>> m.digest()
Georg Brandl67ced422007-09-06 14:09:10 +000068 b'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'
Guido van Rossuma19f80c2007-11-06 20:51:31 +000069 >>> m.digest_size
70 16
71 >>> m.block_size
72 64
Georg Brandl116aa622007-08-15 14:28:22 +000073
Christian Heimesfe337bf2008-03-23 21:54:12 +000074More condensed:
Georg Brandl116aa622007-08-15 14:28:22 +000075
Georg Brandl67ced422007-09-06 14:09:10 +000076 >>> hashlib.sha224(b"Nobody inspects the spammish repetition").hexdigest()
Benjamin Peterson0fa3f3d2008-12-29 20:52:09 +000077 'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2'
Georg Brandl116aa622007-08-15 14:28:22 +000078
Gregory P. Smith13b55292010-09-06 08:30:23 +000079.. function:: new(name[, data])
80
81 Is a generic constructor that takes the string name of the desired
82 algorithm as its first parameter. It also exists to allow access to the
83 above listed hashes as well as any other algorithms that your OpenSSL
84 library may offer. The named constructors are much faster than :func:`new`
85 and should be preferred.
Georg Brandl116aa622007-08-15 14:28:22 +000086
Christian Heimesfe337bf2008-03-23 21:54:12 +000087Using :func:`new` with an algorithm provided by OpenSSL:
Georg Brandl116aa622007-08-15 14:28:22 +000088
89 >>> h = hashlib.new('ripemd160')
Georg Brandl67ced422007-09-06 14:09:10 +000090 >>> h.update(b"Nobody inspects the spammish repetition")
Georg Brandl116aa622007-08-15 14:28:22 +000091 >>> h.hexdigest()
Benjamin Peterson0fa3f3d2008-12-29 20:52:09 +000092 'cc4a5ce1b3df48aec5d22d1f16b894a0b894eccc'
Georg Brandl116aa622007-08-15 14:28:22 +000093
Gregory P. Smith13b55292010-09-06 08:30:23 +000094Hashlib provides the following constant attributes:
Gregory P. Smith86508cc2010-03-01 02:05:26 +000095
Gregory P. Smith13b55292010-09-06 08:30:23 +000096.. data:: algorithms_guaranteed
Gregory P. Smith86508cc2010-03-01 02:05:26 +000097
Gregory P. Smith13b55292010-09-06 08:30:23 +000098 Contains the names of the hash algorithms guaranteed to be supported
99 by this module on all platforms.
100
101 .. versionadded:: 3.2
102
103.. data:: algorithms_available
104
105 Contains the names of the hash algorithms that are available
106 in the running Python interpreter. These names will be recognized
107 when passed to :func:`new`. :attr:`algorithms_guaranteed`
108 will always be a subset. Duplicate algorithms with different
109 name formats may appear in this set (thanks to OpenSSL).
Gregory P. Smith86508cc2010-03-01 02:05:26 +0000110
111 .. versionadded:: 3.2
112
Georg Brandl116aa622007-08-15 14:28:22 +0000113The following values are provided as constant attributes of the hash objects
114returned by the constructors:
115
116
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +0000117.. data:: hash.digest_size
Georg Brandl116aa622007-08-15 14:28:22 +0000118
Guido van Rossuma19f80c2007-11-06 20:51:31 +0000119 The size of the resulting hash in bytes.
120
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +0000121.. data:: hash.block_size
Guido van Rossuma19f80c2007-11-06 20:51:31 +0000122
123 The internal block size of the hash algorithm in bytes.
Georg Brandl116aa622007-08-15 14:28:22 +0000124
125A hash object has the following methods:
126
127
128.. method:: hash.update(arg)
129
Georg Brandl67ced422007-09-06 14:09:10 +0000130 Update the hash object with the object *arg*, which must be interpretable as
131 a buffer of bytes. Repeated calls are equivalent to a single call with the
132 concatenation of all the arguments: ``m.update(a); m.update(b)`` is
133 equivalent to ``m.update(a+b)``.
Georg Brandl116aa622007-08-15 14:28:22 +0000134
Georg Brandl705d9d52009-05-05 09:29:50 +0000135 .. versionchanged:: 3.1
Georg Brandl67b21b72010-08-17 15:07:14 +0000136 The Python GIL is released to allow other threads to run while hash
Jesus Cea5b22dd82013-10-04 04:20:37 +0200137 updates on data larger than 2047 bytes is taking place when using hash
Georg Brandl67b21b72010-08-17 15:07:14 +0000138 algorithms supplied by OpenSSL.
Gregory P. Smith3f61d612009-05-04 00:45:33 +0000139
Georg Brandl116aa622007-08-15 14:28:22 +0000140
141.. method:: hash.digest()
142
Georg Brandl67ced422007-09-06 14:09:10 +0000143 Return the digest of the data passed to the :meth:`update` method so far.
Senthil Kumaran627284c2010-12-30 07:07:58 +0000144 This is a bytes object of size :attr:`digest_size` which may contain bytes in
Georg Brandl67ced422007-09-06 14:09:10 +0000145 the whole range from 0 to 255.
Georg Brandl116aa622007-08-15 14:28:22 +0000146
147
148.. method:: hash.hexdigest()
149
Georg Brandl67ced422007-09-06 14:09:10 +0000150 Like :meth:`digest` except the digest is returned as a string object of
151 double length, containing only hexadecimal digits. This may be used to
152 exchange the value safely in email or other non-binary environments.
Georg Brandl116aa622007-08-15 14:28:22 +0000153
154
155.. method:: hash.copy()
156
157 Return a copy ("clone") of the hash object. This can be used to efficiently
Georg Brandl67ced422007-09-06 14:09:10 +0000158 compute the digests of data sharing a common initial substring.
Georg Brandl116aa622007-08-15 14:28:22 +0000159
160
161.. seealso::
162
163 Module :mod:`hmac`
164 A module to generate message authentication codes using hashes.
165
166 Module :mod:`base64`
167 Another way to encode binary hashes for non-binary environments.
168
169 http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf
170 The FIPS 180-2 publication on Secure Hash Algorithms.
171
Georg Brandlfd0eb3f2010-05-21 20:28:13 +0000172 http://en.wikipedia.org/wiki/Cryptographic_hash_function#Cryptographic_hash_algorithms
173 Wikipedia article with information on which algorithms have known issues and
Georg Brandl116aa622007-08-15 14:28:22 +0000174 what that means regarding their use.
175