blob: d487900b9610be7a26a9dd3735b7a15650031083 [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
18algorithm (defined in Internet :rfc:`1321`). The terms secure hash and message
19digest are interchangeable. Older algorithms were called message digests. The
20modern term is secure hash.
21
22.. warning::
23
24 Some algorithms have known hash collision weaknesses, see the FAQ at the end.
25
26There is one constructor method named for each type of :dfn:`hash`. All return
27a hash object with the same simple interface. For example: use :func:`sha1` to
28create a SHA1 hash object. You can now feed this object with arbitrary strings
29using the :meth:`update` method. At any point you can ask it for the
30:dfn:`digest` of the concatenation of the strings fed to it so far using the
31:meth:`digest` or :meth:`hexdigest` methods.
32
33.. index:: single: OpenSSL
34
35Constructors for hash algorithms that are always present in this module are
36:func:`md5`, :func:`sha1`, :func:`sha224`, :func:`sha256`, :func:`sha384`, and
37:func:`sha512`. Additional algorithms may also be available depending upon the
38OpenSSL library that Python uses on your platform.
39
40For example, to obtain the digest of the string ``'Nobody inspects the spammish
41repetition'``::
42
43 >>> import hashlib
44 >>> m = hashlib.md5()
45 >>> m.update("Nobody inspects")
46 >>> m.update(" the spammish repetition")
47 >>> m.digest()
48 '\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'
49
50More condensed::
51
52 >>> hashlib.sha224("Nobody inspects the spammish repetition").hexdigest()
53 'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2'
54
55A generic :func:`new` constructor that takes the string name of the desired
56algorithm as its first parameter also exists to allow access to the above listed
57hashes as well as any other algorithms that your OpenSSL library may offer. The
58named constructors are much faster than :func:`new` and should be preferred.
59
60Using :func:`new` with an algorithm provided by OpenSSL::
61
62 >>> h = hashlib.new('ripemd160')
63 >>> h.update("Nobody inspects the spammish repetition")
64 >>> h.hexdigest()
65 'cc4a5ce1b3df48aec5d22d1f16b894a0b894eccc'
66
67The following values are provided as constant attributes of the hash objects
68returned by the constructors:
69
70
71.. data:: digest_size
72
73 The size of the resulting digest in bytes.
74
75A hash object has the following methods:
76
77
78.. method:: hash.update(arg)
79
80 Update the hash object with the string *arg*. Repeated calls are equivalent to
81 a single call with the concatenation of all the arguments: ``m.update(a);
82 m.update(b)`` is equivalent to ``m.update(a+b)``.
83
84
85.. method:: hash.digest()
86
87 Return the digest of the strings passed to the :meth:`update` method so far.
88 This is a string of :attr:`digest_size` bytes which may contain non-ASCII
89 characters, including null bytes.
90
91
92.. method:: hash.hexdigest()
93
94 Like :meth:`digest` except the digest is returned as a string of double length,
95 containing only hexadecimal digits. This may be used to exchange the value
96 safely in email or other non-binary environments.
97
98
99.. method:: hash.copy()
100
101 Return a copy ("clone") of the hash object. This can be used to efficiently
102 compute the digests of strings that share a common initial substring.
103
104
105.. seealso::
106
107 Module :mod:`hmac`
108 A module to generate message authentication codes using hashes.
109
110 Module :mod:`base64`
111 Another way to encode binary hashes for non-binary environments.
112
113 http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf
114 The FIPS 180-2 publication on Secure Hash Algorithms.
115
116 http://www.cryptography.com/cnews/hash.html
117 Hash Collision FAQ with information on which algorithms have known issues and
118 what that means regarding their use.
119