- How to Solve Python Modulenotfounderror: no module named ‘Crypto.Cipher’
- What is Crypto.Cipher?
- Always Use a Virtual Environment to Install Packages
- How to Install Crypto.cipher on Windows Operating System
- How to Install pycryptodome on Mac Operating System using pip
- How to Install pycryptodome on Linux Operating Systems
- Installing pip for Ubuntu, Debian, and Linux Mint
- Installing pip for CentOS 8 (and newer), Fedora, and Red Hat
- Installing pip for CentOS 6 and 7, and older versions of Red Hat
- Installing pip for Arch Linux and Manjaro
- Installing pip for OpenSUSE
- pycryptodome Installation on Linux with Pip
- Installing pycryptodome Using Anaconda
- Check pycryptodome Version
- Summary
- Share this:
- Crypto.Cipher package¶
- API principles¶
- Symmetric ciphers¶
- Legacy ciphers¶
How to Solve Python Modulenotfounderror: no module named ‘Crypto.Cipher’
The ModuleNotFoundError occurs when the module you want to use is not present in your Python environment. There are several causes of the modulenotfounderror:
The module’s name is incorrect, in which case you have to check the name of the module you tried to import. Let’s try to import the re module with a double e to see what happens:
--------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) 1 import ree ModuleNotFoundError: No module named 'ree'
To solve this error, ensure the module name is correct. Let’s look at the revised code:
import re print(re.__version__)
You may want to import a local module file, but the module is not in the same directory. Let’s look at an example package with a script and a local module to import. Let’s look at the following steps to perform from your terminal:
mkdir example_package cd example_package mkdir folder_1 cd folder_1 vi module.py
Note that we use Vim to create the module.py file in this example. You can use your preferred file editor, such as Emacs or Atom. In module.py , we will import the re module and define a simple function that prints the re version:
import re def print_re_version(): print(re.__version__)
Close the module.py , then complete the following commands from your terminal:
Inside script.py , we will try to import the module we created.
import module if __name__ == '__main__': mod.print_re_version()
Let’s run python script.py from the terminal to see what happens:
Traceback (most recent call last): File "script.py", line 1, in ≺module≻ import module ModuleNotFoundError: No module named 'module'
To solve this error, we need to point to the correct path to module.py , which is inside folder_1 . Let’s look at the revised code:
import folder_1.module as mod if __name__ == '__main__': mod.print_re_version()
When we run python script.py , we will get the following result:
You can also get the error by overriding the official module you want to import by giving your module the same name.
Lastly, you can encounter the modulenotfounderror when you import a module that is not installed in your Python environment.
What is Crypto.Cipher?
Crypto.cipher is a package that contains algorithms for protecting the confidentiality of data.
The simplest way to install Crypto.Cipher is to use the package manager for Python called pip to install pycryptodome . The following installation instructions are for the major Python version 3.
Always Use a Virtual Environment to Install Packages
It is always best to install new libraries within a virtual environment. You should not install anything into your global Python interpreter when you develop locally. You may introduce incompatibilities between packages, or you may break your system if you install an incompatible version of a library that your operating system needs. Using a virtual environment helps compartmentalize your projects and their dependencies. Each project will have its environment with everything the code needs to run. Most ImportErrors and ModuleNotFoundErrors occur due to installing a library for one interpreter and trying to use the library with another interpreter. Using a virtual environment avoids this. In Python, you can use virtual environments and conda environments. We will go through how to install oscrpyto with both.
How to Install Crypto.cipher on Windows Operating System
First, you need to download and install Python on your PC. Ensure you select the install launcher for all users and Add Python to PATH checkboxes. The latter ensures the interpreter is in the execution path. Pip is automatically on Windows for Python versions 2.7.9+ and 3.4+.
You can check your Python version with the following command:
You can install pip on Windows by downloading the installation package, opening the command line and launching the installer. You can install pip via the CMD prompt by running the following command.
You may need to run the command prompt as administrator. Check whether the installation has been successful by typing.
You can activate the environment by typing the command:
# Activate on Windows env\Scripts\activate # Activate on Windows (cmd.exe) env\Scripts\activate.bat # Activate on Windows (PowerShell) env\Scripts\Activate.ps1
You will see “ env ” in parenthesis next to the command line prompt. You can install pycryptodome within the environment by running the following command from the command prompt.
python3 -m pip install pycryptodome
We use python -m pip to execute pip using the Python interpreter we specify as Python. Doing this helps avoid ImportError when we try to use a package installed with one version of Python interpreter with a different version. You can use the command which python to determine which Python interpreter you are using.
How to Install pycryptodome on Mac Operating System using pip
Open a terminal by pressing command (⌘) + Space Bar to open the Spotlight search. Type in terminal and press enter. To get pip, first ensure you have installed Python3:
Download pip by running the following curl command:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
The curl command allows you to specify a direct download link. Using the -o option sets the name of the downloaded file.
To install pycryptodome , first, create the virtual environment:
Then activate the environment using:
You will see “ env ” in parenthesis next to the command line prompt. You can install pycryptodome within the environment by running the following command from the command prompt.
python3 -m pip install pycryptodome
How to Install pycryptodome on Linux Operating Systems
All major Linux distributions have Python installed by default. However, you will need to install pip. You can install pip from the terminal, but the installation instructions depend on the Linux distribution you are using. You will need root privileges to install pip . Open a terminal and use the commands relevant to your Linux distribution to install pip.
Installing pip for Ubuntu, Debian, and Linux Mint
sudo apt install python-pip3
Installing pip for CentOS 8 (and newer), Fedora, and Red Hat
sudo dnf install python-pip3
Installing pip for CentOS 6 and 7, and older versions of Red Hat
sudo yum install epel-release sudo yum install python-pip3
Installing pip for Arch Linux and Manjaro
Installing pip for OpenSUSE
pycryptodome Installation on Linux with Pip
To install pycryptodome , first, create the virtual environment:
Then activate the environment using:
You will see “ env ” in parenthesis next to the command line prompt.
Once you have activated your virtual environment, you can install pycryptodome using:
python3 -m pip install pycryptodome
Installing pycryptodome Using Anaconda
Anaconda is a distribution of Python and R for scientific computing and data science. You can install Anaconda by going to the installation instructions. Once you have installed Anaconda, you can create a virtual environment and install pycryptodome .
To create a conda environment you can use the following command:
conda create -n project python=3.8
You can specify a different Python 3 version if you like. Ideally, choose the latest version of Python. Next, you will activate the project container. You will see “ project ” in parentheses next to the command line prompt.
Now you’re ready to install pycryptodome using conda .
Once you have installed Anaconda and created your conda environment, you can install pycryptodome using the following command:
conda install -c conda-forge pycryptodome
Check pycryptodome Version
Once you have successfully installed pycryptodome , you can check its version. If you used pip to install pycryptodome , you can use pip show from your terminal.
python3 -m pip show pycryptodome
Name: pycryptodome Version: 3.15.0 Summary: Cryptographic library for Python Home-page: https://www.pycryptodome.org
You can check the version of Crypto by importing the module and printing the __version__ attribute.
import Crypto print(Crypto.__version__)
If you used conda to install pycryptodome , you could check the version using the following command:
conda list -f pycryptodome
# Name Version Build Channel pycryptodome 3.15.0 py38h75f0e43_0 conda-forge
Summary
Congratulations on reading to the end of this tutorial.
Go to the online courses page on Python to learn more about Python for data science and machine learning.
For further reading on missing modules in Python, go to the articles:
Have fun and happy researching!
Share this:
Crypto.Cipher package¶
The Crypto.Cipher package contains algorithms for protecting the confidentiality of data.
There are three types of encryption algorithms:
- Symmetric ciphers: all parties use the same key, for both decrypting and encrypting data. Symmetric ciphers are typically very fast and can process very large amount of data.
- Asymmetric ciphers: senders and receivers use different keys. Senders encrypt with public keys (non-secret) whereas receivers decrypt with private keys (secret). Asymmetric ciphers are typically very slow and can process only very small payloads. Example: PKCS#1 OAEP (RSA) .
- Hybrid ciphers: the two types of ciphers above can be combined in a construction that inherits the benefits of both. An asymmetric cipher is used to protect a short-lived symmetric key, and a symmetric cipher (under that key) encrypts the actual message.
API principles¶
The base API of a cipher is fairly simple:
- You instantiate a cipher object by calling the new() function from the relevant cipher module (e.g. Crypto.Cipher.AES.new() ). The first parameter is always the cryptographic key; its length depends on the particular cipher. You can (and sometimes must) pass additional cipher- or mode-specific parameters to new() (such as a nonce or a mode of operation).
- For encrypting data, you call the encrypt() method of the cipher object with the plaintext. The method returns the piece of ciphertext. Alternatively, with the output parameter you can specify a pre-allocated buffer for the result. For most algorithms, you may call encrypt() multiple times (i.e. once for each piece of plaintext).
- For decrypting data, you call the decrypt() method of the cipher object with the ciphertext. The method returns the piece of plaintext. The output parameter can be passed here too. For most algorithms, you may call decrypt() multiple times (i.e. once for each piece of ciphertext).
Plaintexts and ciphertexts (input/output) can only be bytes , bytearray or memoryview . In Python 3, you cannot pass strings. In Python 2, you cannot pass Unicode strings.
Often, the sender has to deliver to the receiver other data in addition to ciphertext alone (e.g. initialization vectors or nonces, MAC tags, etc).
>>> from Crypto.Cipher import Salsa20 >>> >>> key = b'0123456789012345' >>> cipher = Salsa20.new(key) >>> ciphertext = cipher.encrypt(b'The secret I want to send.') >>> ciphertext += cipher.encrypt(b'The second part of the secret.') >>> print cipher.nonce # A byte string you must send to the receiver too
Symmetric ciphers¶
There are two types of symmetric ciphers:
- Stream ciphers: the most natural kind of ciphers: they encrypt data one byte at a time. See ChaCha20 and XChaCha20 and Salsa20 .
- Block ciphers: ciphers that can only operate on a fixed amount of data. The most important block cipher is AES , which has a block size of 128 bits (16 bytes). In general, a block cipher is mostly useful only together with a mode of operation , which allows one to encrypt a variable amount of data. Some modes (like CTR) effectively turn a block cipher into a stream cipher.
The widespread consensus is that ciphers that provide only confidentiality, without any form of authentication, are undesirable. Instead, primitives have been defined to integrate symmetric encryption and authentication (MAC). For instance:
Legacy ciphers¶
A number of ciphers are implemented in this library purely for backward compatibility purposes. They are deprecated or even fully broken and should not be used in new designs.
- Single DES and Triple DES (block ciphers)
- RC2 (block cipher)
- ARC4 (stream cipher)
- Blowfish (block cipher)
- CAST-128 (block cipher)
- PKCS#1 v1.5 encryption (RSA) (asymmetric cipher)