ModuleNotFoundError: No module named crypto
Вы получаете эту ошибку, так как пытаетесь импортировать модуль crypto, но он не был установлен в Вашем python окружении.
Чтобы установить модуль, напишите в терминале:
pip install crypto
Чтобы установить модуль в интерактивной среде инструментов Google Colab, Kaggle/Jupyter Notebook или ipython, запустите такую ячейку/строчку:
!pip install crypto
А теперь немного деталей:
pip — это стандартный пакетный менеджер для python. Эта программа должна установить недостающий пакет в Вашем окружении / текущей сессии Google Colab, Kaggle/Jupyter Notebook или ipython.
! — восклицательный знак в интерактивных оболочках применяется для отправки команд не в интерпретатор python, а в shell оболочку. В ней исполняются команды вроде cd, ls, pwd, и в том числе pip. Статья на Хабре про основы работы в shell оболочке
Вы уже сделали 2 правильные вещи — засели за питон и загуглили ошибку. Эти 2 действия определяют программиста. Все что осталось — повторять их достаточно долго, и успех неизбежен. Подпишитесь на наш телеграм, чтобы узнавать о новых материалах — они помогут Вам в освоении новой области.
Installation¶
The installation procedure depends on the package you want the library to be in. PyCryptodome can be used as:
- An almost drop-in replacement for the old PyCrypto library. You install it with:
pip install pycryptodome
In this case, all modules are installed under the Crypto package. You can test everything is right with:
pip install pycryptodome-test-vectors python -m Crypto.SelfTest
pip install pycryptodomex
You can test everything is right with:
pip install pycryptodome-test-vectors python -m Cryptodome.SelfTest
If you intend to run PyCryptodome with Python 2.7 under Windows, you must first install the Microsoft Visual C++ 2015 Redistributable. That is not necessary if you use Python 3.
The procedures below go a bit more in detail, by explaining how to setup the environment for compiling the C extensions for each OS, and how to install the GMP library.
Compiling in Linux Ubuntu¶
If you want to install under the Crypto package, replace below pycryptodomex with pycryptodome .
$ sudo apt-get install build-essential python-dev $ pip install pycryptodomex $ pip install pycryptodome-test-vectors $ python -m Cryptodome.SelfTest
$ sudo apt-get install build-essential python3-dev $ pip install pycryptodomex $ pip install pycryptodome-test-vectors $ python3 -m Cryptodome.SelfTest
$ sudo apt-get install build-essential pypy-dev $ pip install pycryptodomex $ pip install pycryptodome-test-vectors $ pypy -m Cryptodome.SelfTest
Compiling in Linux Fedora¶
If you want to install under the Crypto package, replace below pycryptodomex with pycryptodome .
$ sudo yum install gcc gmp python-devel $ pip install pycryptodomex $ pip install pycryptodome-test-vectors $ python -m Cryptodome.SelfTest
$ sudo yum install gcc gmp python3-devel $ pip install pycryptodomex $ pip install pycryptodome-test-vectors $ python3 -m Cryptodome.SelfTest
$ sudo yum install gcc gmp pypy-devel $ pip install pycryptodomex $ pip install pycryptodome-test-vectors $ pypy -m Cryptodome.SelfTest
Windows (from sources)¶
If you want to install under the Crypto package, replace below pycryptodomex with pycryptodome . That being the case and if you want to run the test, instead of Cryptodome.SelfTest , run Crypto.SelfTest .
Windows does not come with a C compiler like most Unix systems. The simplest way to compile the PyCryptodome extensions from source code is to install the minimum set of Visual Studio components freely made available by Microsoft.
- [Once only] Download Build Tools for Visual Studio 2019. In the installer, select the C++ build tools, the Windows 10 SDK, and the latest version of MSVC v142 x64/x86 build tools.
- Compile and install PyCryptodome:
> pip install pycryptodomex --no-binary :all:
> pip install pycryptodome-test-vectors > python -m Cryptodome.SelfTest
Documentation¶
Project documentation is written in reStructuredText and it is stored under Doc/src . To publish it as HTML files, you need to install sphinx and use:
> make -C Doc/ html
It will then be available under Doc/_build/html/ .
PGP verification¶
All source packages and wheels on PyPI are cryptographically signed. They can be verified with the following PGP key:
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =DpoI -----END PGP PUBLIC KEY BLOCK-----
Installation
If this does not work please upgrade your pip first, as that is the single most common cause of installation problems.
Supported platforms
Currently we test cryptography on Python 3.7+ and PyPy3 7.3.11+ on these operating systems.
- x86-64 RHEL 8.x
- x86-64 CentOS 9 Stream
- x86-64 Fedora (latest)
- x86-64 macOS 13 Ventura and ARM64 macOS 14 Sonoma
- x86-64 Ubuntu 20.04, 22.04, rolling
- ARM64 Ubuntu 22.04
- x86-64 Debian Buster (10.x), Bullseye (11.x), Bookworm (12.x), Trixie (13.x), and Sid (unstable)
- x86-64 and ARM64 Alpine (latest)
- 32-bit and 64-bit Python on 64-bit Windows Server 2022
We test compiling with clang as well as gcc and use the following OpenSSL releases in addition to distribution provided releases from the above supported platforms:
- OpenSSL 1.1.1-latest
- OpenSSL 3.0-latest
- OpenSSL 3.1-latest
We also test against the latest commit of BoringSSL as well as versions of LibreSSL that are receiving security support at the time of a given cryptography release.
Building cryptography on Windows
The wheel package on Windows is a statically linked build (as of 0.5) so all dependencies are included. To install cryptography , you will typically just run
$ pip install cryptography
If you prefer to compile it yourself you’ll need to have OpenSSL installed. You can compile OpenSSL yourself as well or use a binary distribution. Be sure to download the proper version for your architecture and Python (VC2015 is required for 3.7 and above). Wherever you place your copy of OpenSSL you’ll need to set the OPENSSL_DIR environment variable to include the proper location. For example:
C:\> \path\to\vcvarsall.bat x86_amd64 C:\> set OPENSSL_DIR=C:\OpenSSL-win64 C:\> pip install cryptography
If you need to rebuild cryptography for any reason be sure to clear the local wheel cache.
Building cryptography on Linux
You should upgrade pip and attempt to install cryptography again before following the instructions to compile it below. Most Linux platforms will receive a binary wheel and require no compiler if you have an updated pip !
cryptography ships manylinux wheels (as of 2.0) so all dependencies are included. For users on pip 19.3 or above running on a manylinux2014 (or greater) compatible distribution (or pip 21.2.4 for musllinux ) all you should need to do is:
$ pip install cryptography
If you want to compile cryptography yourself you’ll need a C compiler, a Rust compiler, headers for Python (if you’re not using pypy ), and headers for the OpenSSL and libffi libraries available on your system.
On all Linux distributions you will need to have Rust installed and available .
Alpine
$ sudo apk add gcc musl-dev python3-dev libffi-dev openssl-dev cargo pkgconfig
If you get an error with openssl-dev you may have to use libressl-dev .
Debian/Ubuntu
The Rust available in Debian versions prior to Bookworm are older than the minimum supported version. See the Rust installation instructions for information about installing a newer Rust.
$ sudo apt-get install build-essential libssl-dev libffi-dev \ python3-dev cargo pkg-config
Fedora/RHEL/CentOS
For RHEL and CentOS you must be on version 8.8 or newer for the command below to install a sufficiently new Rust. If your Rust is less than 1.63.0 please see the Rust installation instructions for information about installing a newer Rust.
$ sudo dnf install redhat-rpm-config gcc libffi-devel python3-devel \ openssl-devel cargo pkg-config
Building
You should now be able to build and install cryptography. To avoid getting the pre-built wheel on manylinux compatible distributions you’ll need to use —no-binary .
$ pip install cryptography --no-binary cryptography
Using your own OpenSSL on Linux
Python links to OpenSSL for its own purposes and this can sometimes cause problems when you wish to use a different version of OpenSSL with cryptography. If you want to use cryptography with your own build of OpenSSL you will need to make sure that the build is configured correctly so that your version of OpenSSL doesn’t conflict with Python’s.
The options you need to add allow the linker to identify every symbol correctly even when multiple versions of the library are linked into the same program. If you are using your distribution’s source packages these will probably be patched in for you already, otherwise you’ll need to use options something like this when configuring OpenSSL:
$ ./config -Wl,-Bsymbolic-functions -fPIC shared
Static Wheels
Cryptography ships statically-linked wheels for macOS, Windows, and Linux (via manylinux and musllinux ). This allows compatible environments to use the most recent OpenSSL, regardless of what is shipped by default on those platforms.
If you are using a platform not covered by our wheels, you can build your own statically-linked wheels that will work on your own systems. This will allow you to continue to use relatively old Linux distributions (such as LTS releases), while making sure you have the most recent OpenSSL available to your Python programs.
To do so, you should find yourself a machine that is as similar as possible to your target environment (e.g. your production environment): for example, spin up a new cloud server running your target Linux distribution. On this machine, install the Cryptography dependencies as mentioned in Building cryptography on Linux . Please also make sure you have virtualenv installed: this should be available from your system package manager.
Then, paste the following into a shell script. You’ll need to populate the OPENSSL_VERSION variable. To do that, visit openssl.org and find the latest non-FIPS release version number, then set the string appropriately. For example, for OpenSSL 1.1.1k, use OPENSSL_VERSION=»1.1.1k» .
When this shell script is complete, you’ll find a collection of wheel files in a directory called wheelhouse . These wheels can be installed by a sufficiently-recent version of pip . The Cryptography wheel in this directory contains a statically-linked OpenSSL binding, which ensures that you have access to the most-recent OpenSSL releases without corrupting your system dependencies.
set -e OPENSSL_VERSION="VERSIONGOESHERE" CWD=$(pwd) virtualenv env . env/bin/activate pip install -U setuptools pip install -U wheel pip curl -O https://www.openssl.org/source/openssl-$.tar.gz tar xvf openssl-$.tar.gz cd openssl-$ ./config no-shared no-ssl2 no-ssl3 -fPIC --prefix=$/openssl make && make install cd .. OPENSSL_DIR="$/openssl" pip wheel --no-cache-dir --no-binary cryptography cryptography
Building cryptography on macOS
If installation gives a fatal error: ‘openssl/aes.h’ file not found see the FAQ for information about how to fix this issue.
The wheel package on macOS is a statically linked build (as of 1.0.1) so for users with pip 8 or above you only need one step:
$ pip install cryptography
If you want to build cryptography yourself or are on an older macOS version, cryptography requires the presence of a C compiler, development headers, and the proper libraries. On macOS much of this is provided by Apple’s Xcode development tools. To install the Xcode command line tools (on macOS 10.10+) open a terminal window and run:
$ xcode-select --install
This will install a compiler (clang) along with (most of) the required development headers.
You will also need to have Rust installed and available , which can be obtained from Homebrew, MacPorts, or directly from the Rust website. If you are linking against a universal2 archive of OpenSSL, the minimum supported Rust version is 1.66.0.
Finally you need OpenSSL, which you can obtain from Homebrew or MacPorts. Cryptography does not support the OpenSSL/LibreSSL libraries Apple ships in its base operating system.
To build cryptography and dynamically link it:
$ brew install openssl@3 rust $ env OPENSSL_DIR="$(brew --prefix openssl@3)" pip install cryptography
$ sudo port install openssl rust $ env OPENSSL_DIR="-L/opt/local" pip install cryptography
You can also build cryptography statically:
$ brew install openssl@3 rust $ env OPENSSL_STATIC=1 OPENSSL_DIR="$(brew --prefix openssl@3)" pip install cryptography
$ sudo port install openssl rust $ env OPENSSL_STATIC=1 OPENSSL_DIR="/opt/local" pip install cryptography
If you need to rebuild cryptography for any reason be sure to clear the local wheel cache.
Rust
If you are using Linux, then you should upgrade pip (in a virtual environment!) and attempt to install cryptography again before trying to install the Rust toolchain. On most Linux distributions, the latest version of pip will be able to install a binary wheel, so you won’t need a Rust toolchain.
Building cryptography requires having a working Rust toolchain. The current minimum supported Rust version is 1.63.0. This is newer than the Rust some package managers ship, so users may need to install with the instructions below.
Instructions for installing Rust can be found on the Rust Project’s website. We recommend installing Rust with rustup (as documented by the Rust Project) in order to ensure you have a recent version.
Rust is only required when building cryptography , meaning that you may install it for the duration of your pip install command and then remove it from a system. A Rust toolchain is not required to use cryptography . In deployments such as docker , you may use a multi-stage Dockerfile where you install Rust during the build phase but do not install it in the runtime image. This is the same as the C compiler toolchain which is also required to build cryptography , but not afterwards.
© Copyright 2013-2024, Individual Contributors. Revision 00f8304a .
Модули криптографии Python
В этой главе вы узнаете подробно о различных модулях криптографии в Python.
Модуль криптографии
Он включает в себя все рецепты и примитивы и обеспечивает высокоуровневый интерфейс кодирования на Python. Вы можете установить криптографический модуль, используя следующую команду –
pip install cryptography

Код
Вы можете использовать следующий код для реализации модуля криптографии –
from cryptography.fernet import Fernet key = Fernet.generate_key() cipher_suite = Fernet(key) cipher_text = cipher_suite.encrypt("This example is used to demonstrate cryptography module") plain_text = cipher_suite.decrypt(cipher_text)
Выход
Приведенный выше код дает следующий вывод:

Приведенный здесь код используется для проверки пароля и создания его хэша. Он также включает логику для проверки пароля для аутентификации.
import uuid import hashlib def hash_password(password): # uuid is used to generate a random number of the specified password salt = uuid.uuid4().hex return hashlib.sha256(salt.encode() + password.encode()).hexdigest() + ':' + salt def check_password(hashed_password, user_password): password, salt = hashed_password.split(':') return password == hashlib.sha256(salt.encode() + user_password.encode()).hexdigest() new_pass = input('Please enter a password: ') hashed_password = hash_password(new_pass) print('The string to store in the db is: ' + hashed_password) old_pass = input('Now please enter the password again to check: ') if check_password(hashed_password, old_pass): print('You entered the right password') else: print('Passwords do not match')
Выход
Сценарий 1. Если вы ввели правильный пароль, вы можете найти следующий вывод:

Сценарий 2 – Если мы введем неправильный пароль, вы можете найти следующий вывод –

объяснение
Пакет Hashlib используется для хранения паролей в базе данных. В этой программе используется соль, которая добавляет случайную последовательность в строку пароля перед реализацией хэш-функции.