## Introduction

Today, we will implement **AES in Python** for encryption and decryption in Python. Python has a Crypto Cipher package for securing the data i.e. **PyCryptoDome**, an almost drop-in replacement for the old **PyCrypto** library. It contains both symmetric and asymmetric key ciphers as well as some hybrid encryption algorithms. Use the command below to install pycryptodome-

`pip install pycryptodome`

We start by selecting our encryption algorithm. The **new()** function is called to create an instance of the cipher. It takes the key as a parameter along with additional parameters like nonce and mode of operation. The **encrypt()** function is used to perform the encryption and **decrypt()** for performing decryption.

## AES in Python – Encryption

```
# importing AES
from Crypto.Cipher import AES
# encryption key
key = b'C&F)H@McQfTjWnZr'
# create new instance of cipher
cipher = AES.new(key, AES.MODE_EAX)
# data to be encrypted
data = "Welcome to copyassignment.com!".encode()
# nonce is a random value generated each time we instantiate the cipher using new()
nonce = cipher.nonce
# encrypt the data
ciphertext = cipher.encrypt(data)
# print the encrypted data
print("Cipher text:", ciphertext)
```

### Output:

## AES in Python – Decryption

```
# generate new instance with the key and nonce same as encryption cipher
cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
# decrypt the data
plaintext = cipher.decrypt(ciphertext)
print("Plain text:", plaintext)
```

### Output:

We implemented the AES algorithm in python in just a few lines of code. AES is much faster and safer than its predecessor DES algorithm and it is also implemented in hardware for faster processing.

**Now, let’s understand, What are Encryption, Decryption, and AES in computer science?**

## What is Encryption?

Encryption is a technique of converting plain text data into cipher text. It is used for secure communications. Only the person with the decryption key is able to decrypt the cipher and view the actual contents of the data.

## Types of Encryption

There are 2 types of encryption depending upon the nature of the key:

**Symmetric Key Encryption**: In this type of encryption, the same key used for encrypting the data can be used for decrypting the data. This is a faster mode of encryption.**Asymmetric Key Encryption**: In this type of encryption, there are different keys for performing encryption and decryption. It is slower than symmetric key encryption. It can be used for authentication purposes as it is used in digital signatures.

There are 2 types of encryption based on the way the text is encrypted:

**Stream Cipher**: In this mode, the text is encrypted one bit at a time. It is faster than block cipher and is more complex.**Block Cipher**: This mode encrypts the data one block at a time. The data is divided into many blocks and then the blocks are encrypted. Parallel encryption is possible.

## Advanced Encryption Standard (AES)

AES is a symmetric key block cipher established by the US government in 2001. It supercedes the DES algorithm and is about 6 times faster than DES. DES had a small key size, this made it prone to brute-force attacks as the advancement in technology has made processor speeds very high. It takes in 128-bit plain text and a key of 128, 192, or 256 bits and outputs cipher text of 128 bits. It utilizes a substitution permutation network (SP). SP involves a series of linked operations including replacing certain bits (substitution) and interchanging bits’ positions or shuffling them (permutation).

AES is widely adopted around the world as the security standard. No cryptanalytic attacks against AES have been found. It is one of the safest and fastest encryption algorithms.

AES uses a key schedule process to generate n +1 128-bit keys from the given key, where n is the number of rounds.

## Encryption Process

AES consists of 10, 12, or 14 rounds of encryption depending on key sizes as 128, 192, and 256 bits respectively. AES works using bytes instead of bits so a standard AES encryption takes 16 bytes or 128 bits of data as input. Each round of AES consists of four steps.

**SubBytes or Bytes Substitution:**In this step, the input bytes are substituted with each other using a look-up table (S-Box ). During substitution, it is taken care that the byte is not substituted by itself or by the compliment of that byte. It results in a 4 X 4 matrix.- Shift Rows: The rows of the matrix are substituted following a predefined order. The first row is not shifted and the remaining three rows are shifted left in incremental order i.e. the second row is left shifted by one byte, the third row is shifted by two bytes and the fourth row is shifted by three bytes. The output is a 4 X 4 matrix with shifted rows.
- MixColumns: This step consists of transforming the columns of the matrix. This is done by multiplying each column with a different function. Thus all column values are transformed. This step is not done in the last round.
**AddRoundKey**: XOR operation is performed between the output of the previous step and the round key. In this step, the data is not treated as bytes but as bits and each bit of the previous step is XORed with each bit of the round key, resulting in a 128-bit output.

## Decryption Process

The decryption process is the same as the encryption process but in reverse order. Here, first, we perform AddRoundKey, then MixColumns, then ShiftRows, and finally SubBytes.

If you have any questions/doubts in mind, please use the comments below.

Thank you for reading this article, click here to start learning Python in 2022.

We hope this article on AES in Python will help you.

**Keep Learning, Keep Coding**

**Also Read:**

- Sequel Programming Languages(SQL)In this article, we are going to learn about Sequel Programming Languages(SQL). Big enterprises like Facebook, Instagram, and LinkedIn, use SQL for storing the data in the back-end. So, If you want to get a job in the field of data, then it is the most important query language to learn. Before getting started, let…
- Run Python Code, Install Libraries, Create a Virtual Environment | VS CodeVisual Studio Code is one of the most efficient code compilers/interpreters. It is very promising because of the vast and widely available go-to extensions that help programmers. This article is an elaborative detail about how we can run Python code, install Python libraries, and create a virtual environment in Visual Studio Code. Write and Run…
- Calendar using Java with best examplesIn this article, we are going to learn how to code Calendar using Java. The calendar application is occasionally asked in interviews to be built by the candidate. If you are intermediate in Java, it helps to improve your coding skills also, it is interesting to make this application. Let’s get started! Calendar class in…
- How to make a Process Monitor in Python?In this article, we will build an application, Process Monitor in python using psutil. Python has a wide range of libraries and packages, which makes it the best choice for many developers. In the same way, we are going to make use of the psutil package to build our application, Process Monitor in Python. What…
- C++ Array AssignmentToday, we will learn C++ Array Assignment. We can assign multiple values to C++ Arrays. There are many ways you can initialize a C++ array. You can create different datatypes of arrays in C++ e.g. string, int, etc are the two most common types of C++ arrays that are commonly used. Today, we will see…
- Employee Management System Project in JavaIntroduction We are going to develop an Employee Management System Project in Java. This project is great for those who are at an intermediate level and want to advance their coding skills. We will be creating a GUI interface using the swing package. This will be a GUI-based program with MySQL as a database. Administrators…
- NxNxN Matrix in Python 3A 3d matrix(NxNxN) can be created in Python using lists or NumPy. Numpy provides us with an easier and more efficient way of creating and handling 3d matrices. We will look at the different operations we can provide on a 3d matrix i.e. NxNxN Matrix in Python 3 using NumPy. Create an NxNxN Matrix in…
- Calculator Program in Python | On Different IDEsWelcome to copyassignment.com. In this tutorial, we are going to write a simple Calculator Program in Python and run it on different IDEs of python for creating a calculator we are using the mathematical operators, functions, conditional statements, and handling of user input to create our calculator. In this tutorial, we are going to see…
- Naive Bayes in Machine LearningIn the Machine Learning series, following a bunch of articles, in this article, we are going to learn about the Naive Bayes Algorithm in detail. This algorithm is simple as well as efficient in most cases. Before starting with the algorithm get a quick overview of other machine learning algorithms. What is Naive Bayes? Naive Bayes…
- Lee Algorithm in Python | Solution to Maze Routing Problem in PythonIntroduction Definition: The Lee algorithm is one feasible solution for maze routing problems based on a breadth-first search. It always gives an optimal solution, if one exists, but is slow and requires considerable memory. We will learn Lee Algorithm in Python by Solution to Maze Routing Problem. The Lee algorithm has the properties of a)…