A Quick Introduction: Hashing
Tags: hashing, python, algorithms
Published: 2017-04-02 22:03:44

---
title: "A Quick Introduction: Hashing"
published: true
description: What is hashing and how can you do it?
cover_image: http://i.imgur.com/gvgIJeb.png
tags: hashing, python, algorithm
---
## What is it?
Hashing is a method of determining the equivalence of two chunks of data. A cryptographic hash function generates a unique string for any set of data. Examples of these data could be files, strings, streams, and any other items that can be represented in binary format.  

You've probably seen a hash string on the downloads page of some of your favorite tools, packages, or libraries. For example, Kali Linux [has one for each of its releases](https://www.kali.org/downloads). But why is that?  

This is to ensure that the original file on their server is the same as the one that you've downloaded. For example, the [SHA-256](https://en.wikipedia.org/wiki/SHA-2) hash of the Kali ISO is below.

![Kali ISO Hash](https://cdn-images-1.medium.com/max/1600/1*Cv3S8G0KnPtladCwLgEHcg.png)

If you download the file, you should hash your local copy. If the resulting hash is equivalent to the one found on their website, you can rest assured that the file has not been tampered with during the download and that you have the same, correct file.  

## Wait...but how do you hash stuff?
![Confused GIF](https://media.giphy.com/media/RFYMmNb3j60BG/giphy.gif) 

Excellent question. Let's get technical! *I'm assuming you have Python 2 installed, by the way.*  

**1-** Let's import the library we need.


```python
import hashlib as hash
```

**2-** Now let's choose our hashing algorithm. *For more information on their differences, [check this out](https://security.stackexchange.com/a/30209).*


```python
sha = hash.sha256()
```

**3-** We're basically set up, now we'll go ahead test the function on a string.


```python
# Insert the string we want to hash
sha.update('Hello World!')
# Print the hexadecimal format of the binary hash we just created
print sha.hexdigest()
""" 4d3cf15aa67c88742e63918825f3c80f203f2bd59f399c81be4705a095c9fa0e """
```


Awesome, there's a SHA-256 hash of the string "Hello World!". Now we'll prove that the hash is different for similar data.  


```python
# Note the missing '!'
sha.update('Hello World')
print sha.hexdigest()
""" a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e """
```

It's totally different.  
**4-** Now that we know that our function works, let's try it on a file


```python
# WARNING: Do NOT do this with large files.
# For large files, see the snippet here -> https://gist.github.com/aunyks/042c2798383f016939c40aa1be4f4aaf
with open('kali.iso', 'rb') as kali_file:
  file_buffer = kali_file.read()
  sha.update(file_buffer)
  print sha.hexdigest()
""" 1d90432e6d5c6f40dfe9589d9d0450a53b0add9a55f71371d601a5d454fa0431 """
```

There we go. You've got some pretty good knowledge of hashing now. So, go. Go on! Secure the integrity of your data and hash all the things!  
![Confidence GIF](https://media.giphy.com/media/xT0BKCQJDzoTaeQyA0/giphy.gif)
Also, follow me on [Twitter](https://twitter.com/aunyks) and [Github](https://github.com/aunyks), please.