簡體   English   中英

使用python gnupg,我的私鑰被作為公鑰讀入

[英]Using python gnupg, my private key is being read in as a public key

我不確定是什么引起了這個問題。 我正在使用Python 3.6.1 :: Anaconda 4.4.0(64位)和gnupg 2.3.1版本。

我的代碼如下:

import gnupg

gpg = gnupg.GPG(binary='C:/GnuPG/bin/gpg.exe', homedir='./pgp')
pri_key = 'pri_key.pgp'
pub_key = 'pub_key.pgp'

key_data = open(pri_key, 'rb').read()
import_result = gpg.import_keys(key_data)
print(import_result.results)

gpg.list_keys(secret=True) # []
gpg.list_keys() 
'''
[{'algo': '1',
  'date': '1510176716',
  'dummy': '',
  'expires': '',
  'fingerprint': '...',
  'keyid': '...',
  'length': '2048',
  'ownertrust': '-',
  'rev': {},
  'sigs': {'Alex F <alexf@outlook.com>': []},
  'subkeys': [['...', 'e']],
  'trust': '-',
  'type': 'pub',
  'uids': ['Alex F <alexf@outlook.com>']}]
'''

我的私鑰如下:

-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: OpenPGP.js v2.0.0
Comment: http://openpgpjs.org

xcLYB...
-----END PGP PRIVATE KEY BLOCK-----

我也可以很好地讀取公共密鑰。

我還在這里https://github.com/isislovecruft/python-gnupg/issues/216打開了一個案例。

更新:

感謝@fuglede提供了GnuPG版本1.4.2的技巧。 我可以從這里https://lists.gnupg.org/pipermail/gnupg-announce/2015q4/000382.html下載。

下載后,我可以成功讀取私鑰。 但是,當我嘗試讀入我的公共密鑰時,似乎沒有被加載。 這是帶有輸出的完整代碼。

import gnupg

gpg = gnupg.GPG(binary='C:/GnuPG/bin/gpg.exe', homedir='./pgp')
pri_key = 'private_key.pgp'
pub_key = 'public_key.pgp'

'''
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: OpenPGP.js v2.0.0

xsBNBFoDd8wBCADGDhfQRVyBY7ttCRyRwR6wrzmmQir6cPS+w/3ftQbeCyJ7
...
f9VcgxXoj2EOmCVrUu5kOYwsDgZJnz/+yGs1afaAXwr/VPIusHplkdYqWcgO
m0h4GrUKz1NJArQd0lo=
=ZV3T
-----END PGP PUBLIC KEY BLOCK-----
'''

gpg.list_keys()
'''
[]
'''

key_data_pri = open(pri_key, 'rb').read()
import_result = gpg.import_keys(key_data_pri)
print(import_result.results)
'''
[{'fingerprint': '61A...37E', 'status': 'Contains private key\n'}, {'fingerprint': '61A...37E', 'status': 'Entirely new key\n'}]
'''

key_data_pub = open(pub_key, 'rb').read()
import_result = gpg.import_keys(key_data_pub)
print(import_result.results)
'''
[{'fingerprint': '61A...37E', 'status': 'Not actually changed\n'}]
'''

gpg.list_keys(secret=True)
'''
[{'algo': '1',
  'date': '1510176716',
  'dummy': '',
  'expires': '',
  'fingerprint': '61A...37E',
  'keyid': '...',
  'length': '2048',
  'ownertrust': '',
  'rev': {},
  'sigs': {'Alex F <alexf@outlook.com>': []},
  'subkeys': [],
  'trust': '',
  'type': 'sec',
  'uids': ['Alex F <alexf@outlook.com>']}]
'''

gpg.list_keys()
'''
[{'algo': '1',
  'date': '1510176716',
  'dummy': '',
  'expires': '',
  'fingerprint': '61A...37E',
  'keyid': '...',
  'length': '2048',
  'ownertrust': '-',
  'rev': {},
  'sigs': {'Alex F <alexf@outlook.com>': []},
  'subkeys': [['FBBD...312', 'e']],
  'trust': '-',
  'type': 'pub',
  'uids': ['Alex F <alexf@outlook.com>']}]
'''

unencrypted_string = 'Who are you? How did you get in my house?'
encrypted_data = gpg.encrypt(unencrypted_string, 
                             'alexf@outlook.com', 
                             'alexf@outlook.com',
                             always_trust=True)
encrypted_string = str(encrypted_data)

print ('ok: ', encrypted_data.ok)
print ('status: ', encrypted_data.status)
print ('stderr: ', encrypted_data.stderr)
print ('unencrypted_string: ', unencrypted_string)
print ('encrypted_string: ', encrypted_string)
'''
ok:  False
status:  invalid recipient
stderr:  gpg: --recipient: skipped: public key not found
[GNUPG:] INV_RECP 1 --recipient
gpg: [stdin]: encryption failed: public key not found

unencrypted_string:  Who are you? How did you get in my house?
encrypted_string:  
'''

我認為,現在的問題是未讀取公用密鑰,正如在讀取時Not actually changed\\n所證明的那樣。 當我嘗試加密時,它說stderr: gpg: --recipient: skipped: public key not found

這只是答案的一半,但顯然不適合評論。 您所做的工作對我來說在Python 3.6.3,python-gnupg 2.3.1和gpg 1.4.20(在Windows上)中也很好:

C:\Users\username>gpg --version
gpg (GnuPG) 1.4.20
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: ~/.gnupg
Supported algorithms:
Pubkey: RSA, RSA-E, RSA-S, ELG-E, DSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2


C:\Users\username>pip show gnupg
Name: gnupg
Version: 2.3.1
Summary: A Python wrapper for GnuPG
Home-page: https://github.com/isislovecruft/python-gnupg
Author: Isis Agora Lovecruft
Author-email: isis@patternsinthevoid.net
License: GPLv3+
Location: c:\users\username\appdata\local\continuum\anaconda3\lib\site-packages
Requires: psutil


C:\Users\username>ipython
Python 3.6.3 |Anaconda custom (64-bit)| (default, Oct 27 2017, 12:22:41) [MSC v.1900 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 6.1.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import gnupg

In [2]: gpg = gnupg.GPG(binary='C:/Users/username/AppData/Local/Programs/Git/usr/bin/gpg.exe', homedir='./gpg')

In [3]: gpg.list_keys()
Out[3]: []

In [4]: key_data = '-----BEGIN PGP PRIVATE KEY BLOCK-----\nVersion: GnuPG v1\n\nlQPGBFoTDywBCADbf6BS2JOp3KUP7IHBvuS/xX8zPHHET7DZsQc/DluN+nhHUwHm\n+aERadI642O5kWsd
   ...: EyhKWXjT8pmdZXiC154CqjRbFN7l5Gbs8juYI9VmM++Aw86e\nePcGARGwLW9WMu5z9/5C/5wkHXsOucguV0oLSuAUa5g6odfRoffSbw5FOuRcte6y\n3xG8Jz/zWAYFIV6VIvL0FRCI/kGhkCGlXkmqxp
   ...: bnSDDKej5b0U7EtqQ/tqaoNLAK\nbijPAT1ZeZ4YtVwlAIrGxBCgyUdz3tuOisX5vf0fbyr7SGG3tF1Pk5MTcOfG5VT5\nGWNvcy+pQ1OK/BIPNw6z/b8r2vaf+hQw5cw9ABEBAAH+BwMCweSq9poFLPFg
   ...: TPjE\nC3u8qA5rA/UCOA007+MRBugTHWgJubl+67m4auyc8xh2qiFdoMcNE/rXO0i9SBIZ\nu4iVsnG5wONoLlPoUXopPtucmuwHvUQfPRcHnYkNyJfQn2Y2ONw9Betjw+cvAjM5\nr3ROn+zNG7ctKT8B
   ...: QXZH2GrF95xkpYJ8g2rukEt0i5Zker2wwDfeLqXHTsJtosBd\npJHiFeSuZRIh/F1xUfPtK37TyjqsTI1EuEg4g9SNVgc6Siynr2v5oTe7NP9lnTMV\nmZP7qVU3DuaamaWYCzh0oN1DCFrTebJW4W4jWp
   ...: JgcM176EFFBg6udf/EpHfl+3j+\nMY3k3r9HBrXJ4faHp7ItfFzjeLEk+Parg0oHaJjptQYjuOISaA85KSAWuE10PKcU\nPTiGw8f1tcfh8sCepZeNqjxztzmPD+XNDm0Q/IbNNgyzsUu8LeNoSDhmR3Qe
   ...: YJmN\n6kN8PGfDEyWr0fGvnwzi+qMRvlJEbJBD/aRcibM8N9BBlFm4oCKfpIBojpLCO6+m\nEZpRIsAqY+x/7D0+O7yUbEMRhsj4lO8rRKLCb3rOF4UYIZdhXwCJ5Zp1dTG+qxU8\nNAN6JYzMxZd0u4PJ
   ...: jEqmPO5kwunEyXtBC7P5nEUezoz00IFRdvsAxWPApaPXI8vY\npRlwVeWkfgKzTyFsev0XW6D5d90mF2gcrlRdtFNFtLONd5/i18jbXe7sqMCzU0kA\nYaCkmdm7TovAuJPduuCcUk6L8+Glm3b5t+RolN
   ...: NXd7xZkdFw23l80YOIsjiW6fY4\n0Imiftp96u3idl29tzGLrzm3Rm2Q6zD6OMAfYEYArpehflJc15iV06gk3nldUWLw\nzApeZFX95BSBac3dKHRzr445l7dND6FZARwEcmJR3pUgrX/COdnp93H0gNnT
   ...: ZDl5\nB4WxZKE6FJg0tB1xd2VxZXEgKHF3ZSkgPHF3ZXF3ZUBxd2UucXdlPokBOAQTAQIA\nIgUCWhMPLAIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQEF/b6eGSNHJX\nUQf+NHIhrGuMk1WZ
   ...: Ptu3GMoyoRZoCG1waqJpSRb3yDAwO9oNw1XwEGHEGjIsL7gF\n4E+QyOpsFa8CL8d+MwN0+dTd9369L7avEC41GjboDfTBUDfi9BU5oHMNacBajfth\nWNRtizjAOU0GYw1ZtsBHzgGcylSObr0Tds8N2C
   ...: Ffzi0ta3WNTJifBNxlwCbFW6t5\nIxCa+2bfqUqpK6XL57GQtD/iIxketYpzXXt85YE3tocxmvy9BJw+3Y7uN6NSN37N\n3TWSKi9ytibdwfMNZ0RLZPJUlUQK0wgzMAZ+RS7KWJqcPg9oEv7MPqlVXbGH
   ...: y1bq\nd4H7s9LyzkY46YtHhJ2m9/TWA50DxgRaEw8sAQgAvSNV6QoXElp0Ak/QyXnE03aF\n81tx3JEc9Zxkp7cdgaY+IwZxzJ+nQSYgbD1MqDhomvTZ7KXh66LBgwGsugZNkaJe\njHUZiK8wNg2NJuEs
   ...: HU2gaX5v0DBxou1TGVPlm9Ltb1PnkIDYuRjM0GTKKK1FBTOL\nia+/8XQyQZD72dLSUrMoD0vp4xG4dXsKEqWyw+aBGrnhOx7t/GGFkL7I3GunbBAb\nfqSK36hjbynf29rZJYHebjBv9qq2tpcmYCgGvg
   ...: bGMxDrMscI0LfJZzPI5X4sl1Gh\n374Qn7eFgSbNc6+TuEWYskkTiX4ebKbkcHpBRlCOhDLsoVixikLqwtJvmajiEQAR\nAQAB/gcDAsHkqvaaBSzxYLGVCLkCXXKa7HiWbJY+BjIk/lS9cYoUqFOqlKup
   ...: JaDJ\nnpKAyd30BWvQjcIGThGJvYBy30JxgDoFwEcZQ5U07qN8bW0cSkDYkEtmurrs46TB\n7++n3Ut/GT1IB/nULzmMMQ5g5vjMfT9hT15P/fpz2cVcz13aidvVx+44sl37H6zI\nw927BzxBF0HacyeE
   ...: xIZEZpsBq+yEIIhjEIL5xSDD09iO3vGYgVsHXT1WDP+OuSqN\nVXk6/85JG+rmIxHWsk/8rc7BbYzb9e3yVYQTACR3wTKbv8KzUykAI6STEEBICB5m\nTgc/ST9jgSF2+dwCa6s+DDnVzrBj90yZD1r1yV
   ...: 6unCusXV5n8q+NBTWKCfQCQYIv\nyU86IB2kn606mGpPa6WkaWamyILc4Vj93LLsiduWwcIFMRhKUBXWJ9P+88ZQeP8F\n6CgbdsoVHfZu+He69pAwvWFxuySNCxdOWYRACvNCCqwQ4nrWDfX7MtMNcsIP
   ...: FP0m\nC/BWs0TxygYhzq/G8reF93lyJp8biYRI4mjiZSVd+YdEvSTnbvkGxnx698GbQqOO\n45Xnj/AoafwlNyrcqIJkXYi3Ih6EaKlUv1/pNvq4iu+uU/OhNfzEilin8vvWVB/E\nOzvtjnIz+egdcsUh
   ...: 7FfCR5FO09zVww8hcZauM2GpqxQ8FScSYWsVcOnjxXe7fUGR\nyEoMMvryZUjM/zkrvOJCn33yYOVZCiD5WFvx2WlQsQuT9cVOWTf2VXuVjTyAlaaY\nzclFjv5n+fZNW7V6Z18vmQ3gQEj5FSTqSV3f0v
   ...: BT4H6/huHWc9RAKWge5w8tLJHW\nxSL67l3E8yJuIklD6/wQi1zxd6evD5k987yDEAxiVReUtPxJPMT1DqARj/Isa5OX\n5S+kk0FraUZcPs2mO4cYoYSBwGX4SBszpZaEYYkBHwQYAQIACQUCWhMPLAIb
   ...: DAAK\nCRAQX9vp4ZI0cu+0CACH0DgG3qmsnq9bxozGeCUtztNbbJQOFgU2emaIzHDB/8Pl\n4qCmzTRHVxEixZ2u59gG/wqaQuBXw+44oLuQUjjOMm1iYlz2APgYBUq7KOpTh6I+\nEarV1HBFDsoAhdQP
   ...: XuXbSCSEdBEIJbWXNgKpFZiDXXMnRUCdBalXYMOWCnCnzglt\nDoe//s7/9xT2snCEGJ9Ebs42N/6IGLEKIpJymU7FcaEb1/f2k9aYPSiZxKHZDidC\nyKAZxPA+YMvsstTH8OqH391v6sJ+yK5cO5dnkA
   ...: 1/oEhrnKqDvlBT6rbo2GbB4X44\ngsb5u9eBimrpH66QsMQSnHXE1aw5fqajE5t+MWBd\n=MpyL\n-----END PGP PRIVATE KEY BLOCK-----\n'

In [5]: import_result = gpg.import_keys(key_data)

In [6]: import_result.results
Out[6]:
[{'fingerprint': 'D2E8871D9EFFD91B1569FD48105FDBE9E1923472',
  'status': 'Contains private key\n'},
 {'fingerprint': 'D2E8871D9EFFD91B1569FD48105FDBE9E1923472',
  'status': 'Entirely new key\n'}]

In [7]: gpg.list_keys(secret=True)
Out[7]:
[{'algo': '1',
  'date': '1511198508',
  'dummy': '',
  'expires': '',
  'fingerprint': 'D2E8871D9EFFD91B1569FD48105FDBE9E1923472',
  'keyid': '105FDBE9E1923472',
  'length': '2048',
  'ownertrust': '',
  'rev': {},
  'sigs': {'qweqeq (qwe) <qweqwe@qwe.qwe>': []},
  'subkeys': [],
  'trust': '',
  'type': 'sec',
  'uids': ['qweqeq (qwe) <qweqwe@qwe.qwe>']}]

您是否能夠提供觀察到的行為適用的key_data值?

更新的答案以回答更新的問題:

GPG.encrypt使用的語法已關閉。 根據文檔data加密通過gpg.encrypt(data, recipients) ,其中“ recipients是這些收件人的密鑰指紋列表”。 在上面的示例中,這意味着可以按以下方式加密消息:

In [54]: encrypted_data = gpg.encrypt('test', 'D2E8871D9EFFD91B1569FD48105FDBE9E1923472')

In [55]: encrypted_data.ok, str(encrypted_data)
Out[55]:
(True,
 '-----BEGIN PGP MESSAGE-----\n\nhQEMA6vzRkOvQDF8AQgAkykuXaK7sujYU4uZseqXsYpKw7TZdSagAu86jOq+JMyC\nGygnWdcUSevilDE97RE6TJjrYa3Q+fM+Dn9xwtaco2g6W/ZKF9EPIrLuVaC8NpM4\nuKNm5SHE9orHPbZpFw3w1JuC8uZqk/XaNXHz7V7TD2KAbyxZ4qMtvhuSYvaU00Rg\nIrPOc66S8PtnKIcpjVUgz33KKr1Pnoa9dMcrfJfpvKU2iaAflgTW0jF7WlNwk5eE\n7ZkTILbpN1LNqBg4n9B5hs/oZ0IheQvcbh58SwIODARWtUlxLWGIWIZ1+AEhXmUs\nDl0BI98gw46p2NffetdAjhF8LqM7MmJ73+37ZwMhQ9I/AdE6gkSousPHg5dRmU1y\n0CE5kzA8K+qCgschy/t3cRtBPaf9mXBCcodcF9VHIZrP7ACO7JLSl5hi5iEKPtfm\n=P1fg\n-----END PGP MESSAGE-----\n')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM