GPG: ファイルの暗号化/復号

$ echo "this is message" > message.txt

$ cat message.txt
this is message

相手の公開鍵で暗号化

メッセージの共有相手から事前に公開鍵をもらっておく必要がある。
相手の鍵の中に、暗号用用途 ([E]) の鍵が含まれている必要がある。

pub   ed25519/BF98EE21F2F9F048 2024-04-04 [C]
      A360CEF20643088F3958CDECBF98EE21F2F9F048
uid           [unknown] foo@example.com
sub   ed25519/02B2D9F670FD18C9 2024-04-04 [S]
sub   cv25519/371EEB1712AAD061 2024-04-04 [E] # <- NEED [E] KEY

相手の鍵を指定して、 gpg --encrypt --recipient *KEYID* *FILE* コマンドを実行する。(KEYID は相手のメールアドレスでもよい。)
–armor オプションを併せて指定すると、テキスト形式で出力される。(ファイルサイズはバイナリで出力した時よりも大きくなる)

$ gpg --encrypt --recipient 371EEB1712AAD061 message.txt
$ ls
message.txt   message.txt.gpg
$ cat message.txt.gpg
���`�10�fTv!��~����ւh���uIү�m   &?�W�q��:Z��8G1�OB��p�_,S�k3�M}�NW>7�.KQm\�B|���j꽽{��}
                                                                                       b)��8-z�␦��ֲL}�9�OQ�_^�VH�
$ gpg --armor --encrypt --recipient 371EEB1712AAD061 message.txt
$ ls
message.txt   message.txt.asc
$ cat message.txt.asc
-----BEGIN PGP MESSAGE-----

hF4DNx7rFxKq0GESAQdAODJxrtgR5PtcY8aLP4iGYgL+mQLRZ+zGW59KYH5hCXEw
3J149tyDSW2/MdYW8DvZpLILlcYryp/xuFtbTzW1Wyk71FyhX6IjDGREQkTzG0TW
0k8BEIUOAtjt+c2EccpmzuQ/r75AXZzUlhigPtOSzjdGoL2dLTsPJ2P313YC0ptR
j7ZVL+KKCNQ9BQZ5KOYH0WXjUEJuqHng9oUKsR2uuuAv
=bFxQ
-----END PGP MESSAGE-----

自分の秘密鍵で復号

自分の公開鍵で暗号化されたファイルを受け取ったら、自分の秘密鍵で復号する。処理結果をファイルに残すとオプションと併用して、 gpg --output *OUTFILE* --decrypt *INFILE* コマンドを実行する。

$ ls
message.txt.asc
$ gpg --output message.txt --decrypt message.txt.asc
gpg: encrypted with 255-bit ECDH key, ID 371EEB1712AAD061, created 2024-04-08
      "foo@example.com"
$ ls
message.txt   message.txt.asc
$ cat message.txt
this is message