AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

    • Início
    • system&network
    • Ubuntu
    • Unix
    • DBA
    • Computer
    • Coding
    • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-605156

MacUsers's questions

Martin Hope
MacUsers
Asked: 2025-03-09 17:23:34 +0800 CST

gpg.import_keys() não está funcionando no ambiente virtual python

  • 6

Estou executando este trecho de código para criptografar um arquivo usando a chave pública PGP.

import gnupg

def pgp_encrypt(pub_file, out_file):

    gpg = gnupg.GPG()

    with open(pub_file, 'rb') as pgp_pub_key:
        public_key_data = pgp_pub_key.read()

    # import_keys_file() is NOT used as the key
    # eventually will come from user-input
    import_result = gpg.import_keys(public_key_data)
    if import_result.count == 0:
        print("Error: No keys imported. Make sure the public key file is correct.")
        exit()

    pgp_key_id = import_result.results[0]['fingerprint']
    plaintext_data = b'This is the TEST data to encrypt'

    encrypted_data = gpg.encrypt(
        plaintext_data,
        recipients=[pgp_key_id],
        always_trust=True
    )

    if encrypted_data.ok:
        print("Data encrypted successfully.")
        print(encrypted_data.data)
        with open(out_file, 'wb') as encrypted_file:
            encrypted_file.write(encrypted_data.data)
    else:
        print("Encryption failed:")
        print(encrypted_data.status)

## Apply
pgp_encrypt('pgp_pubkey.asc', 'pgp_encrypted_file')

Então, basicamente, é ler o arquivo de chave pública e colocar os dados nele public_key_data, depois importá-los usando gpg.import_keys(public_key_data)antes de criptografar o arquivo.

print(encrypted_data.data)no meu código não está imprimindo o resultado corretamente (na tela, o que é outro problema a ser corrigido), mas está funcionando:

santanu@mgtucrpi5:~/Scripts/gnupg $ python pgp_encrypt.py
Data encrypted successfully.
b'-----BEGIN PGP MESSAGE-----\n\nhQIMA4QM8WwBjfPfAQ/+Jel/JySvuydbuAHDuRT/KwOoFOStYUprQ3TQsj3S3ryJ\nC6bqYD77XviU3fjtcedKxCc0F9Gxw01fb838H0AeACI9Bi4GLuUgS/FJTvrEsX4K\nMniWu4HsConIX+63Ud+RHlVCRziGsa86Uub7GwsaOvYpYhovWzNxc/ObLmoMZaSP\nYmBUHkN+rGGOx4CGGiVS7480Mp2gmd3UyFFbQwV1xO+fz5I+gOcYJSXU0R6SzdXd\nS03sI+8AXLVLmgTARi5ed5V4gr4EIb/bhN18zyUo6gO8vo34GtllFQlRZWL04GRN\n/wg0uudJd26tRxJfCwdcYONKzbNFo8wtLv7dedY+cah+2bTHKFcTWYMGyrhCZZmG\nnZ/GWXnojAz9n9BUNLT/vwQvildfSsuG2qABmk5HUjv0bOH8Ducw6UrbO1pP6hzO\nQcMxGEg8/YQCfI7Zcz1RrIRHWBDlhmG2znDFin2ApyY0N1FmagOJYSZ/ijUkBnT3\nbtIRJ0ISGR7Hjee2G80vKvy0Ozkev2dAhl4Rm3BzoLQV340jEe6dmg8QUPbP0hGU\ni+mlGNMpg50TQVE90ILewhndaBGcBxltS2hVwe+AWj0vhYK3EUqE32Hj7mZxXAWc\nfLTAIXCbsSrZ0Mtc+m6V1IkkwotHaNOea6gqoLMixHbYiwq+F5beu2taYOsespHS\nUQE28ZFF/n6HQ0EUfDuKsd14xUE6UjZvWpfaOor1OedKCife/HkrOOR/VCua1p/T\npROcEBIU2jtazibCiYD1uIy+lwS4w0en8ysFPrLnJuWcFQ==\n=UR1e\n-----END PGP MESSAGE-----\n'

mas no momento em que o executo no ambiente virtual, recebo o seguinte erro:

santanu@mgtucrpi5:~/Scripts/gnupg $ source pgpenv/bin/activate
(pgpenv) santanu@mgtucrpi5:~/Scripts/gnupg $ python pgp_encrypt.py
Traceback (most recent call last):
  File "/home/santanu/Scripts/gnupg/pgp_encrypt.py", line 34, in <module>
    pgp_encrypt('pgp_pubkey.asc', 'pgp_encrypted_file')
  File "/home/santanu/Scripts/gnupg/pgp_encrypt.py", line 11, in pgp_encrypt
    if import_result.count == 0:
       ^^^^^^^^^^^^^^^^^^^
AttributeError: 'ImportResult' object has no attribute 'count'. Did you mean: 'counts'?

se eu mudar para counts(só para tentar), recebo um erro diferente, que também não parece certo:

  File "/home/santanu/Scripts/gnupg/pgpenv/lib/python3.11/site-packages/gnupg/gnupg.py", line 1064, in encrypt
    result = self._encrypt(stream, recipients, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: GPGBase._encrypt() got multiple values for argument 'recipients'

Como posso consertar isso?
ref. https://gnupg.readthedocs.io/en/latest/#importing-and-receiving-keys

=======================================

Para responder à pergunta do @fqlenos:

Foi assim que fiz o ambiente virtual:

% cd ~/Scripts/gnupg
% python3 -m venv pgpenv
% source pgpenv/bin/activate
% pip install gnupg

Eu tentei pip install python-gnupgtambém, mas obtive o mesmo resultado. Há algo que eu esteja esquecendo ou fazendo incorretamente?

python
  • 1 respostas
  • 33 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help
subwaysurfers
my femboy roommate

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve