Как исправить ошибку импорта Python для Crypto.Signature.DSS - PullRequest
0 голосов
/ 22 сентября 2019

Я пытаюсь запустить pycryptodome пример для DSA.Вот пример кода:

from Crypto.PublicKey import DSA
from Crypto.Signature import DSS
from Crypto.Hash import SHA256

# Create a new DSA key
key = DSA.generate(2048)
f = open("public_key.pem", "w")
f.write(key.publickey().export_key())
f.close()

# Sign a message
message = b"Hello"
hash_obj = SHA256.new(message)
signer = DSS.new(key, 'fips-186-3')
signature = signer.sign(hash_obj)

Но я сталкиваюсь с ImportError для DSS.Вот вывод ошибки:

Traceback (most recent call last):
  File "/usr/lib/python3.6/code.py", line 91, in runcode
    exec(code, self.locals)
  File "<input>", line 1, in <module>
  File "/snap/pycharm-professional/154/helpers/pydev/_pydev_bundle/pydev_umd.py", line 197, in runfile
    pydev_imports.execfile(filename, global_vars, local_vars)  # execute the script
  File "/snap/pycharm-professional/154/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "/home/username/Projects/DSA_Example.py", line 2, in <module>
    from Crypto.Signature import DSS
ImportError: cannot import name 'DSS'

Моя среда разработки включает в себя:

  • Ubuntu 18.04.3 LTS
  • Python 3.6.8
  • PyCharm IDE 2019.2
  • Использование venv Виртуальная среда Python
  • pip list показывает команду:
    (venv) username@myubuntu:~/Projects/MyProject/$ pip list
    DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
    asn1crypto (0.24.0)
    cryptography (2.1.4)
    decorator (4.1.2)
    enum34 (1.1.6)
    idna (2.6)
    ipaddress (1.0.17)
    keyring (10.6.0)
    keyrings.alt (3.0)
    networkx (1.11)
    numpy (1.13.3)
    pip (9.0.1)
    pycrypto (2.6.1)
    pycryptodome (3.9.0)
    pygobject (3.26.1)
    pyxdg (0.25)
    PyYAML (3.12)
    rubber (1.4)
    SecretStorage (2.3.1)
    setuptools (39.0.1)
    six (1.11.0)
    wheel (0.30.0)

Теперь, как исправить ошибку импорта для DSS

1 Ответ

1 голос
/ 23 сентября 2019

Похоже, у вас также установлен pycrypto (2.6.1), в котором также есть модуль с именем Crypto.Signature.Происходит то, что Python пытается импортировать pycrypto.Crypto.Signature (у которого нет модуля DSS) вместо pycryptodome.Crypto.Signature.Чтобы исправить это, вы можете попробовать запустить pip uninstall pycrypto и посмотреть, решит ли это вашу проблему.

Примечание на странице установки для pycryptodome гласит: «Нужно избегать установки на PyCrypto и PyCryptodome нав то же время, когда они будут мешать друг другу ».

...