WARNING: Don’t use crypto
or pycrypto
anymore!
As you can read on this page, the usage of pycrypto
is not safe anymore:
Pycrypto is vulnerable to a heap-based buffer overflow in the ALGnew function in block_templace.c. It allows remote attackers to execute arbitrary code in the python application. It was assigned the CVE-2013-7459 number.
Pycrypto didn’t release any fix to that vulnerability and no commit was made to the project since Jun 20, 2014.
Update 2021-01-18
The CVE is fixed now (thanks @SumitBadsara for pointing it out!). You can find the current status of the open security tickets for each package at the Debian security tracker:
python-crypto
pycryptodome
Use Python3’s pycryptodome
instead!
Make sure to uninstall all versions of crypto
and pycrypto
first, then install pycryptodome
:
pip3 uninstall crypto
pip3 uninstall pycrypto
pip3 install pycryptodome
All of these three packages get installed to the same folder, named Crypto
. Installing different packages under the same folder name can be a common source for errors!
For more information, see pycryptodome.org.
Best practice: virtual environments
In order to avoid problems with pip packages in different versions or packages that install under the same folder (i.e. pycrypto
and pycryptodome
) you can make use of a so called virtual environment. There, the installed pip packages can be managed for every single project individually.
To install a virtual environment and setup everything, use the following commands:
# install python3 and pip3
sudo apt update
sudo apt upgrade
sudo apt install python3
sudo apt install python3-pip
# install virtualenv
pip3 install virtualenv
# install and create a virtual environment in your target folder
mkdir target_folder
cd target_folder
python3 -m virtualenv .
# now activate your venv and install pycryptodome
source bin/activate
pip3 install pycryptodome
# check if everything worked:
# start the interactive python console and import the Crypto module
# when there is no import error then it worked
python
>>> from Crypto.Cipher import AES
>>> exit()
# don't forget to deactivate your venv again
deactivate
For more information, see docs.python-guide.org.
In the README document, it indicates
from Crypto.Cipher import AES
, which cannot work with error info ‘ImportError: No module named ‘Crypto».
It should be
from crypto.Cipher import AES
. Import in Python is case-sensitive. I am not sure if it is related to my OS or python version.
My environment is Windows 10 64bit, and Python 3.4
I’m seeing the same problem. My environment is PyCharm for Win7 and «import pycrypto», «import crypto» and «import Crypto» all fail.
@Jurph @dlitz Exactly. I have fixed it on my branch, but in meet a problem during pulling request, that remind me compiling error. It should not occur since I just change some words in a normal text file.
I believe it’s resolved just by renaming the library folder.
If your library has installed it as crypto
instead of Crypto
, simply capitalizing it seems to fix the issue. Exit any IDE you have open, make the change, then reopen and verify if/that it works
@kamakazikamikaze thanks. I just want to fix this problem permanently by changing the import name, and assuming the source code is right.
Когда я пытаюсь запустить app.py(Python 3.3, PyCrypto 2.6), мой virtualenv продолжает возвращать указанную выше ошибку. Операция импорта — это просто from Crypto.Cipher import AES
. Я искал дубликаты, и вы могли бы сказать, что есть некоторые, но я пробовал решения (хотя большинство из них даже не решения), и ничего не получилось.
Вы можете видеть, какие файлы для PyCrypto ниже:
Ответ 1
У меня была такая же проблема (хотя на Linux). Решение было довольно простым — добавьте:
libraries:
- name: pycrypto
version: "2.6"
в мой файл app.yaml
. Поскольку в прошлом это работало правильно, я предполагаю, что это новое требование.
Ответ 2
У меня была такая же проблема на моем Mac при установке с pip
. Затем я удалил pycrypto
и снова установил его с помощью easy_install
, например:
pip uninstall pycrypto
easy_install pycrypto
также, как сказал Люк: Если у вас возникли проблемы с запуском этих команд, обязательно запустите их как admin (sudo)
Надеюсь, это поможет!
Ответ 3
Я столкнулся с этим и на Mac, и, похоже, это связано с тем, что к сожалению, так называемый «криптовый» модуль (не уверен, для чего это) установлен рядом с пикрипто через pip.
Исправление похоже на удаление крипто и пикрипто с помощью pip:
sudo pip uninstall crypto
sudo pip uninstall pycrypto
и переустановка pycrypto:
sudo pip install pycrypto
Теперь он работает так, как ожидалось, когда я делаю что-то вроде:
from Crypto.Cipher import AES
Ответ 4
На маке… если вы столкнетесь с этим.. попробуйте посмотреть, можно ли вместо этого импортировать крипто?
Если это так.. имя пакета является проблемой C
vs C
. Чтобы обойти это, просто добавьте эти строки в начало вашего script.
import crypto
import sys
sys.modules['Crypto'] = crypto
Вы знаете, что сможете успешно импортировать paramiko.
Ответ 5
введите команду:
sudo pip install pycrypto
Ответ 6
Я нашел решение. Проблема, вероятно, в случае чувствительности (в Windows).
Просто измените имя папки:
-
C:Python27Libsite-packagescrypto
- to:
C:Python27Libsite-packagescrypto
Вот как была названа папка после установки pycrypto:
Я изменил его на:
И теперь следующий код работает нормально:
Ответ 7
Удаление crypto
и pycrypto
работает на меня. Затем установите только pycrypto
:
pip uninstall crypto
pip uninstall pycrypto
pip install pycrypto
Ответ 8
если вы используете redhat, fedora, centos:
sudo yum install pycrypto
для моего случая я не могу установить его с помощью pip
Ответ 9
У меня была та же проблема 'ImportError: No module named Crypto.Cipher'
, поскольку с помощью GoogleAppEngineLauncher (версия > 1.8.X) с GAE Boilerplate на OSX 10.8.5 (Mountain Lion). В SDK приложения Google App Engine с исполняемой средой python 2.7 рекомендуется использовать pyCrypto 2.6.
Решение, которое сработало для меня, было…
1) Загрузите исходный код pycrypto2.6 где-нибудь (~/Downloads/pycrypto26
)
например, git clone https://github.com/dlitz/pycrypto.git
2) cd
(cd ~/Downloads/pycrypto26
), то
3) Выполните следующую команду терминала внутри предыдущей папки, чтобы вручную установить pyCrypto 2.6 в папку GAE.
sudo python setup.py install --install-lib /Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine
Ответ 10
Попробуйте с pip3:
sudo pip3 install pycrypto
Ответ 11
Это может быть проблема загрузки модулей python, установленных через pip. См. Этот ответ Невозможно загрузить модули Python, установленные через pip из каталога site-packages, и попробовать что-то вроде
python -m pip install pycrypto
Ответ 12
Для CentOS 7.4 я сначала установил pip, а затем pycrypto, используя pip:
> sudo yum -y install python-pip
> sudo python -m pip install pycrypto
Ответ 13
Работал для меня (Ubuntu 17.10)
Удаление venv и создание его снова с помощью python v3.6
pip3 install PyJWT
sudo apt-get install build-essential libgmp3-dev python3-dev
pip3 install cryptography
pip3 install pycryptodome
pip3 install pycryptodomex
Pycrypto устарел, имел проблемы с ним, использовал Pycryptodome
Ответ 14
Для Windows 7:
Я прошел через эту ошибку «Ошибка модуля Crypo.Cipher import AES»
Чтобы установить Pycrypto в Windows,
Попробуйте это в командной строке,
Установить путь = C:Python27Scripts (путь, где находится easy_install)
Затем выполните следующее:
easy_install pycrypto
Для Ubuntu:
Попробуйте это,
Скачайте Pycrypto с » https://pypi.python.org/pypi/pycrypto»
Затем измените свой текущий путь на загруженный путь с помощью вашего терминала:
Например: root @xyz-virtual-machine: ~/pycrypto-2.6.1 #
Затем выполните следующие операции с помощью терминала:
установка python setup.py
Это сработало для меня. Надежда работает для всех.
Ответ 15
Я решаю эту проблему, изменяя регистр первой буквы на верхнюю.
Убедитесь, что » из Crypto.Cipher импортирует AES » не » из crypto.Cipher import AES ».
Ответ 16
Эта проблема может быть исправлена установкой компилятора С++ (python27 или python26). Загрузите его из Microsoft https://www.microsoft.com/en-us/download/details.aspx?id=44266 и запустите команду: pip install pycrypto
, чтобы запустить веб-доступ gui, когда вы убиваете процесс easy_install.exe
.
Ответ 17
На сегодняшний день у меня from Crypto.Cipher import AES
же проблема при импорте from Crypto.Cipher import AES
даже если я установил/переустановил pycrypto несколько раз. Завершите это, потому что pip по умолчанию — python3.
~ pip --version pip 18.0 from/usr/local/lib/python3.7/site-packages/pip (python 3.7)
установка pycrypo с pip2 должна решить эту проблему.
Ответ 18
Может быть, вы должны это сделать: pycryptodome == 3.6.1 добавить его в requirements.txt и установить, что должно устранить отчет об ошибке. меня устраивает!
Ответ 19
Если вы macos, переименуйте папку lib/python3.7/site-packages/crypto
в lib/python3.7/site-packages/Crypto
Ответ 20
ВНИМАНИЕ: не используйте pycrypto
больше!
Как вы можете прочитать на этой странице, использование pycrypto
больше не является безопасным:
Pycrypto уязвим к переполнению буфера в куче в функции ALGnew в block_templace.c. Это позволяет удалённым злоумышленникам выполнять произвольный код в приложении python. Ему был присвоен номер CVE-2013-7459.
Pycrypto не выпустила ни одного исправления этой уязвимости, и с 20 июня 2014 года в проект не было внесено никаких обязательств.
РЕШЕНИЕ: используйте Python3 и pycryptodome
!
TL; DR: pip3 install pycryptodome
Настройка новой виртуальной среды
Чтобы установить виртуальную среду и все настроить, используйте следующие команды:
# install python3 and pip3
sudo apt update
sudo apt upgrade
sudo apt install python3
sudo apt install python3-pip
# install and create a virtual environment
# cd to or mkdir the folder where you want your venv
pip3 install virtualenv
python3 -m virtualenv .
# now activate your venv and install pycryptodome
source bin/activate
pip3 install pycryptodome
# check if everything worked:
# start the interactive python console and import the Crypto module
# when there is no import error then it worked
python
>>> from Crypto.Cipher import AES
>>> exit()
# don't forget to deactivate your venv again
deactivate
Для получения дополнительной информации см. pycryptodome.org.
Ответ 21
Я с 3.7. Проблема остается после того, как я пытаюсь установить crypto. И Pycrypto просто терпит неудачу в моем случае. В итоге моя сборка прошла через пакет ниже:
pip install pycryptodome
Answer by Randy Roman
from Crypto.Cipher import AES,from crypto.Cipher import AES,When I try to run app.py (Python 3.3, PyCrypto 2.6) my virtualenv keeps returning the error listed above. My import statement is just from Crypto.Cipher import AES. I looked for duplicates and you might say that there are some, but I tried the solutions (although most are not even solutions) and nothing worked.,
Buried here is the solution that worked for me (on Windows 10)
– Joseph
May 16 ’20 at 6:01
I had the same problem on my Mac when installing with pip
. I then removed pycrypto
and installed it again with easy_install
, like this:
pip uninstall pycrypto
easy_install pycrypto
Answer by Averie Lewis
from Crypto.Cipher import AES
ModuleNotFoundError: No module named ‘Crypto’,Yo, I have this problem now with in our Python application.
We are using Crypto. On my friends MAC it’s working. But when I open the code on WINDOWS I’m getting an error.,` from Crypto.Hash import HMAC
ModuleNotFoundError: No module named ‘Crypto’
(venv),from Crypto.PublicKey import RSA
ModuleNotFoundError: No module named ‘Crypto’
I have installed Crypto using pip, but still it shows this error
File "scriptsCert_5_1_01_RouterAttach.py", line 33, in <module>
import config
File "C:threadscriptsconfig.py", line 33, in <module>
import message
File "C:threadscriptsmessage.py", line 39, in <module>
import mac802154
File "C:threadscriptsmac802154.py", line 39, in <module>
from net_crypto import AuxiliarySecurityHeader, CryptoEngine, MacCryptoMaterialCreator
File "C:threadscriptsnet_crypto.py", line 36, in <module>
from Crypto.Cipher import AES
ModuleNotFoundError: No module named 'Crypto'
Answer by Katherine Bridges
Hi. I am trying to run this line in python.,But I am getting this error,It was successful but when I ran the code, I still get the same error,Machine learning tutorial
Hi. I am trying to run this line in python.
from Crypto.Cipher import AES
But I am getting this error
ModuleNotFoundError: No module named 'Crypto'
I tried installing the module using
pip install crypto
Answer by Ezra Mora
You are getting this type of error because there is collision between two modules .,i’m 99% sure u will not get this error again .,pip uninstall pycryptodome,pip install pycryptodome
You are getting this type of error because there is collision between two modules .
File "C:useradmindesktopsmartcartPaytmChecksum.py", line 7, in <module> from Crypto.Cipher import AES ModuleNotFoundError: No module named 'Crypto'
Answer by Linda Owen
>> pip install pycryptodome
from Crypto.Cipher import AES #Works
Issue
I have AES inside the Cipher module inside Crypto (Python27LibCryptoCipherAES
).
When I try to do
from Crypto.Cipher import AES
I get the following error:
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
from Crypto.Cipher import AES
File "C:Python27libCryptoCipherAES.py", line 50, in <module>
from Crypto.Cipher import _AES
ImportError: cannot import name _AES
But I can import
another module like
from Crypto.Cipher import blockalgo
That works fine.
So, I’m guessing there is some error in the AES module?
Solution
Most likely, your PyCrypto installation is broken and _AES.dll is missing.
Try to reinstall it according to this question: How do I install PyCrypto on Windows?
Answered By – alexanderlukanin13
This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0