Secure Hash Algorithm (SHA) in Python
In this tutorial, we will learn about Secure Hash Algorithms (SHA) in Python. First, let’s check out the basics.
The hash function: Hash function is used in cryptography to secure a message by encoding it. It takes input of any length and maps it into a fixed size. Every message should have a unique hash value. A small change in the message should extensively change the hash value. Further, it goes without saying that the same message should always result in the same hash value.
Hash algorithms: There are many cryptographic algorithms available in python. To access it, python has a predefined library known as hashlib. To check the algorithms supported by your current interpreter you can use:
hashlib.algorithms_available
Also, you can use:
hashlib.algorithms_guaranteed
This returns all the algorithms supported on any platform. Implementing this in the code gives us,
import hashlib print(hashlib.algorithms_available) print(hashlib.algorithms_guaranteed)
Output:
{'sha512', 'DSA-SHA', 'SHA224', 'sha', 'ecdsa-with-SHA1', 'DSA', 'sha1', 'sha224', 'md5', 'MD5', 'SHA', 'SHA384', 'SHA1', 'whirlpool', 'SHA256', 'RIPEMD160', 'MD4', 'dsaWithSHA', 'sha256', 'dsaEncryption', 'SHA512', 'sha384', 'ripemd160', 'md4'} {'sha512', 'sha1', 'sha256', 'sha224', 'md5', 'sha384'}
Now that we know about hash functions and algorithms, let us look further into the SHA family.
This tutorial might help you: How to encode a string in MD5 using Python
SHA in Python
Started off in 1993, SHA was revised through a number of versions. SHA-0 was withdrawn a long time ago due to detection of many loopholes. Similarly, SHA-1 is also not recommended and hence is not in use anymore. Next, SHA-2 was introduced. Hash functions in SHA-2 are- SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256. Finally, SHA-3 was written and is currently the latest version of SHA.
Version | Size |
---|---|
SHA-1 | 160 bits |
SHA-256, SHA-384, SHA-224 | 32 bits |
SHA-512 | 64 bits |
The above table shows different SHA versions and their block sizes. Keeping these in mind, let us execute SHA in python. For doing so, we need haslib library and hexdigest() method.
Haslib library: This module provides access to many hash algorithms like md5, SHA-1, etc. Hashlib helps in generating message digest of the original message. (Message digest is a cryptographic hash value of the message resulted using hash algorithms). To use this, simply import it using:
import hashlib
hexdigest() function: This method returns the hashed message in hexadecimal format. Syntax:
string.hexdigest()
Also, we need to encode the message to binary before hashing. We can do that by simply using b’string’ or using the encode() function. If we don’t, we might encounter an error like,
Unicode-objects must be encoded before hashing
How to implement Secure Hash Algorithm (SHA) in Python
Let us now check out the python program to implement different SHA algorithms available.
#import the module import hashlib #encode the message text = hashlib.sha1(b'hello') #convert it to hexadecimal format encrypt = text.hexdigest() #print it print(encrypt)
OUTPUT:
9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
The above code uses SHA-512. Similarly, we can try out different versions of SHA:
import hashlib text1 = hashlib.sha1(b'hello') encrypt1 = text1.hexdigest() print(encrypt1) text2 = hashlib.sha256(b'hello') encrypt2 = text2.hexdigest() print(encrypt2) text3 = hashlib.sha384(b'hello') encrypt3 = text3.hexdigest() print(encrypt3) text4 = hashlib.sha224(b'hello') encrypt4 = text4.hexdigest() print(encrypt4)
OUTPUT:
aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 59e1748777448c69de6b800d7a33bbfb9ff1b463e44354c3553bcdb9c666fa90125a3c79f90397bdf5f6a13de828684f ea09ae9cc6768c50fcee903ed054556e5bfc8347907f12598aa24193
Very interesting topic on cryptography with python, thank you for the explanation and example presented in your website.
wow! this is made me understand the algorithm. I will like to learn more