Получение необычной ошибки gpg при последовательном расшифровке нескольких файлов .gpg в PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Получение необычной ошибки gpg при последовательном расшифровке нескольких файлов .gpg в Python

Сообщение Anonymous »

Мой скрипт Python на экземпляре t2.micro ec2 извлекает некоторые файлы с sftp-сервера, расшифровывает их, а затем загружает в корзину s3. Проблема в том, что иногда при запуске скрипта при расшифровке файлов выдает следующую ошибку:

Код: Выделить всё

[GNUPG:] KEY_CONSIDERED 76D10843726B51C71051CAE7FAC4CE3CE04FAD5D 0
[GNUPG:] NO_SECKEY 4DC1246304071FA0
gpg: public key decryption failed: Wrong secret key used
[GNUPG:] ERROR pkdecrypt_failed 33545451
[GNUPG:] BEGIN_DECRYPTION
[GNUPG:] DECRYPTION_FAILED
gpg: decryption failed: Wrong secret key used
[GNUPG:] END_DECRYPTION
Эта ошибка не имеет смысла, поскольку после этой ошибки я могу вручную расшифровать тот же файл, в котором произошла ошибка расшифровки, используя тот же ключ в терминале.
Файлы, которые я загружаю всегда одни и те же 100 файлов, которые я загружаю. Ошибка всегда возникает при расшифровке какого-то случайного файла, а не одного и того же файла каждый раз.
Единственный способ решить эту проблему - добавить time.sleep(5) между каждым дешифрованием. Однако это очень медленно, поэтому это проблема.
Вот минимальная версия моего кода:

Код: Выделить всё

import os
import sys
import gnupg
import boto3
import json

# Function to decrypt a file and upload it to S3
def decrypt_file_and_upload(encrypted_file_path, destination_bucket, destination_key, passphrase):
gpg = gnupg.GPG()
with open(encrypted_file_path, 'rb') as encrypted_file:
decrypted_data = gpg.decrypt_file(encrypted_file, passphrase=passphrase , always_trust=True)

if decrypted_data.ok:
# Upload to S3 directly
s3_client = boto3.client('s3')
s3_client.put_object(Bucket=destination_bucket, Key=destination_key, Body=decrypted_data.data)
print(f"Decrypted and uploaded {encrypted_file_path} to s3://{destination_bucket}/{destination_key}")
else:
print(f"Decryption failed: {decrypted_data.stderr}")

# Function to process files: decrypt and upload to S3
def download_decrypt_upload(config):
destination_bucket = config['bucket']
decrypted_files_dir = config['decrypt_files_folder']

# Load passphrase from secret
secret_name = config["secretsManager"]["gpg"]["name"]
secret_region = config["secretsManager"]["gpg"]["region_name"]
secrets_manager = boto3.client("secretsmanager", region_name=secret_region)
secret_response = secrets_manager.get_secret_value(SecretId=secret_name)
secret_data = json.loads(secret_response["SecretString"])
passphrase = secret_data['passphrase']

# Decrypt and upload each encrypted file
for file_name in os.listdir(decrypted_files_dir):
if not file_name.endswith('.gpg'):
continue
encrypted_file_path = os.path.join(decrypted_files_dir, file_name)
decrypted_file_name = file_name[:-4]  # Remove .gpg
destination_key = f"decrypted/{decrypted_file_name}"

decrypt_file_and_upload(encrypted_file_path, destination_bucket, destination_key, passphrase)

# Example usage
if __name__ == '__main__':
config = {
'bucket': 'your-s3-bucket',
'decrypt_files_folder': '/path/to/decrypted_files',
'secretsManager': {
'gpg': {
'name': 'your-secret-name',
'region_name': 'your-region'
}
}
}
download_decrypt_upload(config)

Я попробовал передать аргумент «ключ по умолчанию» и установить значение моего секретного ключа в аргументе extra_args функции gpg.decrypt_file, но это не сработало.
Я попробовал поставить time.sleep(1) между каждым дешифрованием, но это не сработало.
Я попробовал запустить расшифровку как подпроцесс вместо использования библиотеки python-gnupg, но это не сработало.
Обратите внимание на это ошибка возникает время от времени, не всегда.


Подробнее здесь: https://stackoverflow.com/questions/790 ... vely-in-py
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»