メインコンテンツにスキップ
Tech & Program 記事一覧に戻る
🔑

ageを使った暗号化

PCの中に色々なリカバリーコードを保存しておきたいけれど,直に置いていると怖い。そんなときにコマンドラインで簡単に暗号化できる方法。

暗号化 age

注意:以下はMacで行っています。また,完全に初心者ですので,ご容赦ください。

ageの導入

brew install age

ちなみに,このageGo実装らしいですね。Rust実装のrageもあるみたいなのですが,今回は完全に初心者ということで,本家の方を使っていきます。

暗号化

まずはここで,ageのコマンドについてまとめておきます。

  • age [オプション] [入力ファイル]
オプション短縮形説明
--encrypt-e暗号化する(デフォルトの動作なので省略可能です)。
--decrypt-d復号する。暗号化されたファイルを元に戻します。
--passphrase-pパスフレーズを使用します。鍵ファイルを持っていない相手に送る時に便利です。
--recipient-r受信者の公開鍵を指定して暗号化します(複数指定してマルチキャストも可能)。
--recipients-file-R複数の公開鍵が書かれたファイルを指定して暗号化します。
--identity-i**自分の秘密鍵(Identityファイル)**を指定して復号します。
--output-o出力先ファイルを指定します(リダイレクト > の代わり)。
--armor-a出力をバイナリではなく、**テキスト形式(PEM)**にします。メールやチャットに貼り付けたい時に便利です。
--suffix(なし)出力ファイル名に .age などの拡張子を自動で付与します。

暗号化のコマンド

  • age -e -p -a [入力ファイル]

このままだと,age -p のバイナリがターミナルに流れるので

  • age -p -a [入力ファイル] > [暗号化ファイル] のようにリダイレクトしましょう。-eは省略可能です。

復号用コマンド

  • age -d [暗号ファイル] > [元のファイル]

実際にやってみる

abc

と書かれたtest.txtファイルを作りましょう。

age -p -a test.txt

これを打つと,パスワード入力が促され

-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNjcnlwdCBveGdjRUhNUVZBTGNKeUFX
NnZpL0tnIDE4Cng2U0FvRnNjT0JCcitiVElEMXJmNEhDR0hwVG1qSElBZjl6NTlI
d3IvNUUKLS0tIHk2VnNGelZzT1A3TWUrcFA4V2MvUU1DMXNydWx0NHVjZDZBRlVL
NHdYdjAKqZIEK/mL/0kH0pFguLkAzSk0kyvEb7nbczGUEgu2+Xb5fvE=
-----END AGE ENCRYPTED FILE-----

とターミナルに表示されます。

これを

age -p -a test.txt > out.txt

とすればこれが書かれたtxtファイルが生成されます。

では,復号もやってみましょう。

age -d out.txt

これを打って,パスワードを入れると,abcとターミナルに表示されます。 ファイルに出力したい場合は,

age -d out.txt > decode.txt

とすればOKです。

複数ファイルまとめて

tarを使います。

tests/test1.txttests/test2.txttests/test3.txtを作成して,中身を書いておきます。中身は区別できるように適当につけておきましょう。

cat tests/*
111
222
333

今回はこのようにしておきました。 では,testsフォルダがあるディレクトリにいる状態で,tarを実行していきましょう。

tarコマンド

一応tarコマンドをまとめておきます。

オプション意味補足
-c作成 (Create)まとめる時
-x展開 (eXtract)取り出す時
-v詳細 (Verbose)ログを表示
-z圧縮 (Gzip)サイズを小さくする
-fファイル指定出力/入力ファイルを指定

簡単に練習しましょう。

tar czf tests.tar.gz tests/

これで,tests.tar.gzというファイルが生成されました。ちなみに,-vオプションを追加すると実行時に以下のような詳細な出力が見られます。必須ではないので,なくても問題ありません。

tar czvf tests.tar.gz tests/

a tests
a tests/test1.txt
a tests/test2.txt
a tests/test3.txt

では,これを展開して戻していきます。

tar xzf tests.tar.gz

まとめて暗号化

では,testsの中身をまとめて暗号化します。

tar czf - tests/ | age -p -a > tests.tar.gz.age

tarの出力ファイル指定(-fオプション)は,パイプで繋いでいるので標準出力(-)を指定します。同様にageの入力ファイル指定も今回はパイプで繋いでいるので指定する必要ありません。

では,復号していきましょう。

age -d tests.tar.gz.age | tar xzf -

今回はageの入力ファイル指定は必要です。ただ,パイプで繋いでいるのでtarの展開の入力ファイルは標準入力(-)を指定します。

復号できたら,catで中身をみていきましょう。

cat tests/*

111
222
333

完璧ですね。