2017-11-20 8 views
0

この問題の原因はわかりません。私はPython 3.6.1 :: Anaconda 4.4.0(64ビット)とgnupgバージョン2.3.1を使用しています。次のようにpython gnupgを使用すると、自分の秘密鍵が公開鍵として読み取られています

私のコードは次のとおりです。

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 <[email protected]>': []}, 
    'subkeys': [['...', 'e']], 
    'trust': '-', 
    'type': 'pub', 
    'uids': ['Alex F <[email protected]>']}] 
''' 

次のように私の秘密鍵は、次のとおりです。

-----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

更新日:GnuPGのバージョン1.4.2の先端を提供するための@fugledeする

感謝。私はここから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 <[email protected]>': []}, 
    'subkeys': [], 
    'trust': '', 
    'type': 'sec', 
    'uids': ['Alex F <[email protected]>']}] 
''' 

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

unencrypted_string = 'Who are you? How did you get in my house?' 
encrypted_data = gpg.encrypt(unencrypted_string, 
          '[email protected]', 
          '[email protected]', 
          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と表示されます。

+1

、GPG.encrypt' 'のマニュアルに従って、「受信者は、鍵ID /指紋を指定する必要があります。」下記の答えの私の例のキーを使用して、 'gpg.encrypt( 'test'、 'D2E8871D9EFFD91B1569FD48105FDBE9E1923472'); ' – fuglede

+1

を使って唯一の公開鍵に対してメッセージを暗号化することができます。 。 – fuglede

+1

@fugledeあなたは最高です。私はあなたにただ受け入れられた答えよりも多くを与えることができたらいいと思う。 –

答えて

1

これは半分の答えですが、明らかにコメントには当てはまりません。あなたがやっていることは、のpython-のgnupg、2.3.1と1.4.20のgpg、また、Windows上のPython 3.6.3で私のために正常に動作します:あなたは観察されているためkey_dataの価値を提供することができ

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: [email protected] 
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) <[email protected]>': []}, 
    'subkeys': [], 
    'trust': '', 
    'type': 'sec', 
    'uids': ['qweqeq (qwe) <[email protected]>']}] 

です行動は保持されますか?

GPG.encryptのために使用される構文がオフになっている:

を更新し、質問に答えるために答えを更新しました。 the documentationによれば、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') 
+0

公開鍵を正しく読み込むことを含め、上のすべてをうまくやることができます。秘密鍵を読み込めません。私は秘密にしておく必要があるプライベートなpgpキーであるので、key_dataの値を与えることはできません。私は上記の元のポストにそれのフォーマットを提供しました。 –

+1

ただし、提供されている例では、秘密鍵*がロードされていることに注意してください。たとえば、次のようなテストで新しいプライベートPGP鍵を生成できます。 '> gpg --gen-key'を実行します。 – fuglede

+0

謝罪、私はちょうどコードをスクロールしませんでした。 –

関連する問題