【Python】Python 〜 python-gnupg / 入門編 〜

◾️はじめに

Pythonでのファイル暗号化・復号化のためのライブラリ
python-gnupg について扱う

目次

【1】前提知識:GnuPG
 1)python-gnupg以外のライブラリ「PGPy」
【2】python-gnupg
 1)インストール
【3】サンプル
 例1:キー生成・暗号化・復号化

【1】前提知識:GnuPG

* GnuPG(グヌー・ピー・ジー) = GNU Privacy Guard
* OpenPGP (RFC4880)という仕様に従ってGNUが作成した
 オープンソースの暗号化ツール
 => 詳細は、以下の関連記事を参照のこと

gpgコマンド 〜 入門編 〜
https://dk521123.hatenablog.com/entry/2026/02/12/143942

1)python-gnupg以外のライブラリ「PGPy」

* OpenPGP規格(RFC 4880)に準拠した
 Pythonプログラム向けのPretty Good Privacy(PGP)ライブラリ
 => 詳細は、以下の関連記事を参照

Python 〜 PGPy 〜
https://dk521123.hatenablog.com/entry/2026/04/11/101026

【2】python-gnupg

* Pythonから GnuPGを利用するためのラッパーライブラリ

1)インストール

Step1: GnuPG のインストール

# Macの場合
brew install gnupg

# Amazon Linux2023
dnf swap gnupg2-minimal gnupg2-full

https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/gnupg-minimal.html

確認

gpg --version

Step2: ライブラリのインストール

pip install python-gnupg

【3】サンプル

例1:キー生成・暗号化・復号化

import os
import gnupg


# --- 設定 ---
os.makedirs('./gpg_home', exist_ok=True)
gpg = gnupg.GPG(gnupghome='./gpg_home')


# --- 鍵ペアを作成 ---
input_data = gpg.gen_key_input(
    name_email='test@example.com',
    passphrase='testpass'
)
key = gpg.gen_key(input_data)
print("✅ 鍵ペアを作成しました:", key.fingerprint)

# --- テスト用ファイル作成 ---
with open('secret.txt', 'w') as f:
    f.write('これは秘密のメッセージです!')

# --- ファイルを暗号化 ---
with open('secret.txt', 'rb') as f:
    encrypted_data = gpg.encrypt_file(
        f,
        recipients=['test@example.com'],
        output='secret.txt.gpg'
    )

if encrypted_data.ok:
    print("🔒 暗号化成功: secret.txt.gpg")
else:
    print("❌ 暗号化失敗:", encrypted_data.stderr)

# --- ファイルを復号化 ---
with open('secret.txt.gpg', 'rb') as f:
    decrypted_data = gpg.decrypt_file(
        f,
        passphrase='testpass',
        output='decrypted.txt'
    )

if decrypted_data.ok:
    print("🔓 復号化成功: decrypted.txt")
else:
    print("❌ 復号化失敗:", decrypted_data.stderr)

関連記事

Python 〜 python-gnupg / 基本編 〜
https://dk521123.hatenablog.com/entry/2026/06/11/175208
Python 〜 python-gnupg / MDC 〜
https://dk521123.hatenablog.com/entry/2026/07/02/131449
Python ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2014/08/07/231242
Python 〜 PGPy 〜
https://dk521123.hatenablog.com/entry/2026/04/11/101026
gpgコマンド 〜 入門編 〜
https://dk521123.hatenablog.com/entry/2026/02/12/143942
gpgコマンド 〜基本編 〜
https://dk521123.hatenablog.com/entry/2026/04/08/160351
MWAA ~ gpg/python-gnupgを使うには ~
https://dk521123.hatenablog.com/entry/2026/06/12/001707