SHA-1

SHA-1 produces the 160 bit digest of a message. For example:

>>> from Crypto.Hash import SHA1
>>>
>>> h = SHA1.new()
>>> h.update(b'Hello')
>>> print h.hexdigest()

SHA stands for Secure Hash Algorithm.

Warning

This algorithm is not considered secure. Do not use it for new designs.

Warning

SHA-1 is vulnerable to length-extension attacks, which are relevant if you are computing the hash of a secret message.

For instance, let’s say you were planning to build a cheap MAC by concatenating a secret key to a public message m (bad idea!):

\[h = \text{SHA-1}(m || k)\]

By only knowing the digest h and the length of m and k, the attacker can easily compute a second digest h’:

\[h' = \text{SHA-1}(m || p || z)\]

where p is a well-known bit string and the attacker can pick a bit string z at will.

Crypto.SHA1.new(msg=None)

Create a new hash object.

Parameters:

msg (byte string) – Optional. The very first chunk of the message to hash. It is equivalent to an early call to update().

Returns:

A SHA1_Hash hash object

class Crypto.SHA1.SHA1_Hash

A SHA-1 hash object. Do not instantiate directly. Use the new() function.

Variables:
  • oid (string) – ASN.1 Object ID

  • block_size (integer) – the size in bytes of the internal message block, input to the compression function

  • digest_size (integer) – the size in bytes of the resulting hash

update(msg)

Continue hashing of a message by consuming the next chunk of data.

Parameters:

msg – The next chunk of the message being hashed.

digest()

Return the binary (non-printable) digest of the message that has been hashed so far.

Returns:

The hash digest, computed over the data processed so far. Binary form.

Return type:

byte string

hexdigest()

Return the printable digest of the message that has been hashed so far.

Returns:

The hash digest, computed over the data processed so far. Hexadecimal encoded.

Return type:

string