この問題の原因はわかりません。私は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
と表示されます。
、GPG.encrypt' 'のマニュアルに従って、「受信者は、鍵ID /指紋を指定する必要があります。」下記の答えの私の例のキーを使用して、 'gpg.encrypt( 'test'、 'D2E8871D9EFFD91B1569FD48105FDBE9E1923472'); ' – fuglede
を使って唯一の公開鍵に対してメッセージを暗号化することができます。 。 – fuglede
@fugledeあなたは最高です。私はあなたにただ受け入れられた答えよりも多くを与えることができたらいいと思う。 –