GnuPGについては以前書いた。
GnuPGを使うメモ - 偏った言語信者の垂れ流し
今回はPythonからGnuPGを使ってみる。python-gnupgを使う。
試したのはWindowXPでPython2.7。
Sphinxで書かれたドキュメントがあるのがうれしい。
python-gnupg - A Python wrapper for GnuPG — Python Wrapper for GnuPG v0.3.7 documentation
インストールは簡単。
$ pip install python-gnupg
キーを確認する
登録済みのキーを確認する。
ちなみにキーの生成などに対応するメソッドも用意されてるみたいだ。
>>> import gnupg >>> gpg = gnupg.GPG() >>> gpg.list_keys() [{'dummy': u'', 'keyid': u'352AAA553B2CB729', 'expires': u'', 'length': u'2048', 'ownertrust': u'u', 'algo': u'17', 'fingerprint': u'48066A037BF7383EA6E9DE98352AAA553B2CB729', 'date': u'1309616279', 'trust': u'u', 'type': u'pub', 'uids': [u'Shinya Okano (test key) <tokibito@gmail.com>']}]
暗号化する
encryptメソッドかencrypt_fileメソッドを使って暗号化できる。
引数のrecipientsにはfingerprintの値を渡す。
>>> encrypted_data = gpg.encrypt_file(open('test.txt'), u'48066A037BF7383EA6E9DE98352AAA553B2CB729') >>> print encrypted_data -----BEGIN PGP MESSAGE----- Version: GnuPG v1.4.10 (MingW32) hQEOA2TMBqLv+JelEAP/RjfZ0Dy9sGmXw2rNyv54Px+inIVwNqntJHe9jgCHxhNr JFDdRFAtftRVCx23LRm4750jZpTksUkEtuQe6o3ACI2LCHLFayW5FICXX4FjBGhH cZ3XZeJ9mRjBu5FspSVLWsJODC0U2e2WH0yTqMuYZFbsk7rrdiqxhft2s3f8BrED /37NMlmZu6/eteuDs48yWA7h0HOwvWtE9jKt77L7H6754sfe9NN9bCxR3TasoALH kKJDNlGMTdecWIewCT/d2KsZZrn3tjOnlFVflo0ZqTkna9HfBUzyFd+psSkA2O0B fjIopUeBJaE7FQKSK8+wVSW+gM5Ci0BJUes9jMXumJOW0kUBmjPiFzbhHl/+YkW4 4eTktDYq9CedmKk4bw9T+ZVAcHTX3NJQ38FsfBJT24Jh7POI5CvBxv5dZ9C474gX xA0uPZTmxv8= =HrP3 -----END PGP MESSAGE-----
復号化する
decryptメソッドかdecrypt_fileメソッドを使う。
パスフレーズが必要な場合は引数で渡す。
>>> data = """-----BEGIN PGP MESSAGE----- ... Version: GnuPG v1.4.10 (MingW32) ... ... hQEOA2TMBqLv+JelEAP/RjfZ0Dy9sGmXw2rNyv54Px+inIVwNqntJHe9jgCHxhNr ... JFDdRFAtftRVCx23LRm4750jZpTksUkEtuQe6o3ACI2LCHLFayW5FICXX4FjBGhH ... cZ3XZeJ9mRjBu5FspSVLWsJODC0U2e2WH0yTqMuYZFbsk7rrdiqxhft2s3f8BrED ... /37NMlmZu6/eteuDs48yWA7h0HOwvWtE9jKt77L7H6754sfe9NN9bCxR3TasoALH ... kKJDNlGMTdecWIewCT/d2KsZZrn3tjOnlFVflo0ZqTkna9HfBUzyFd+psSkA2O0B ... fjIopUeBJaE7FQKSK8+wVSW+gM5Ci0BJUes9jMXumJOW0kUBmjPiFzbhHl/+YkW4 ... 4eTktDYq9CedmKk4bw9T+ZVAcHTX3NJQ38FsfBJT24Jh7POI5CvBxv5dZ9C474gX ... xA0uPZTmxv8= ... =HrP3 ... -----END PGP MESSAGE----- ... """ >>> data = gpg.decrypt(data, passphrase='test') >>> data.status 'decryption ok' >>> data.data '\xe3\x83\x86\xe3\x82\xb9\xe3\x83\x88\n' >>> print data.data.decode('utf8') テスト
すんなり動かせたので、結構使いやすいかもしれない。