python + скрипт не прошел в отношении криптографии в /usr/lib64/python2.7 - PullRequest
1 голос
/ 28 мая 2020

Я создаю следующий python скрипт

этот python скрипт прочитает файл /lpp/airflow/.sec/rmq_pass в var - pass_hash

и расшифрует это до decrypted_pass

more security_test.py
import sys
import os
import base64
from cryptography.fernet import Fernet

key_file = "/lpp/airflow/.sec/key"
rmq_pass_file = "/lpp/airflow/.sec/rmq_pass"

key = open(key_file, 'r')
f = Fernet(key.read())

pass_hash  = open(rmq_pass_file, 'r')
#decrypting the password from "pass_file" file using the key from the "key_file".
decrypted_pass = f.decrypt(pass_hash.read())
ConnStr = "amqp://airflow:" + decrypted_pass  + "@localhost:5672//"

, когда я запускаю скрипт, он потерпел неудачу на /usr/lib64/python2.7/site-packages/cryptography/fernet.py или любом другом под /usr/lib64/python2.7/site-packages/cryptography

мы пытаемся переустановить пакет криптографии, но это не помогло

и идея, что это может быть?

python  security_test.py
Traceback (most recent call last):
  File "security_test.py", line 14, in <module>
    decrypted_pass = f.decrypt(pass_hash.read())
  File "/usr/lib64/python2.7/site-packages/cryptography/fernet.py", line 75, in decrypt
    return self._decrypt_data(data, timestamp, ttl)
  File "/usr/lib64/python2.7/site-packages/cryptography/fernet.py", line 117, in _decrypt_data
    self._verify_signature(data)
  File "/usr/lib64/python2.7/site-packages/cryptography/fernet.py", line 101, in _verify_signature
    h = HMAC(self._signing_key, hashes.SHA256(), backend=self._backend)
  File "/usr/lib64/python2.7/site-packages/cryptography/hazmat/primitives/hmac.py", line 31, in __init__
    self._ctx = self._backend.create_hmac_ctx(key, self.algorithm)
  File "/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 207, in create_hmac_ctx
    return _HMACContext(self, key, algorithm)
  File "/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/hmac.py", line 34, in __init__
    key_ptr = self._backend._ffi.from_buffer(key)
TypeError: from_buffer() cannot return the address of the raw string within a str or unicode or bytearray object

ВАЖНОЕ ПРИМЕЧАНИЕ - на другая машина этот сценарий работает нормально

как лучше всего решить эту проблему? удалить все модули и установить их заново? или переустановив python?

1 Ответ

1 голос
/ 29 мая 2020

Если это было установлено pip, то эта проблема связана с устаревшим пакетом cffi (мне удалось воспроизвести эту проблему, принудительно установив cffi 1.5 в virtualenv ). Более новые версии cryptography требуют cffi >= 1.8, но pip не всегда разрешает это должным образом (в зависимости от множества других сценариев ios). Вы можете pip install -U cffi увидеть, решит ли это проблему, но в целом вам следует настоятельно рассмотреть возможность запуска кода Python внутри virtualenv, а не установки пакетов в глобальное пространство пакетов. Диспетчер пакетов ОС предполагает, что он владеет глобальными пакетами, и вы можете вызвать множество проблем с вашей установкой, если смешаете и сопоставите пакеты распространения с pip установками.

...