Edited at

opensslコマンドで簡単なファイル暗号化

More than 1 year has passed since last update.

単純にテキストファイルを暗号化する方法はないかと思って探してみるとopensslコマンドで可能でした。おそらく多くの開発マシンやサーバーにはopensslコマンドが入っているので、汎用性は非常に高い気がしています。

こちらを主に参考にしました。

http://cpplover.blogspot.jp/2013/07/gnulinuxcli.html

opensslのサブコマンドのマニュアルの見方がわからず参照していないので、オプションなど微妙に間違っていたら教えていただけると幸いです。


準備

準備するものは以下の2つ。


  • 暗号化したい対象のテキストファイル rawtext.txt

  • パスワードpassword、もしくはパスワードファイルpassword.txt

ちなみにパスワードは1行目にずらずらっと書く必要があるようです。

これらから暗号化ファイルencrypted.txtを出力して、それをdecrypted.txtに復号します。これがrawtext.txtと一致するはず。


暗号化


パスワードを標準入力から取得する場合

$ openssl aes-256-cbc -e -in rawtext.txt -out encrypted.txt

enter aes-256-cbc encryption password: # パスワード入力
Verifying - enter aes-256-cbc encryption password: # もう一度


パスワードをファイルから読み込む場合

$ openssl aes-256-cbc -e -in rawtext.txt -out encrypted.txt -pass file:./password.txt


復号


パスワードを標準入力から取得する場合

$ openssl aes-256-cbc -d -in encrypted.txt -out decrypted.txt

enter aes-256-cbc decryption password: # パスワードを入力


パスワードをファイルから読み込む場合

$ openssl aes-256-cbc -d -in encrypted.txt -out decrypted.txt -pass file:./password.txt


簡単な説明

aes-256-cbcというのが暗号化方式の一つ。ググった感じでは、これがよく使用されている暗号化方式っぽい。暗号化方式の一覧はopenssl list-cipher-commandsで見られる。

-eというのがencrypt、つまり暗号化を表し、-dがdecryptつまり復号を表す。

-passはパスワードの読み込み先を指定する。file:filepathpathのファイルの内容を読み、env:varで環境変数$varを読む。pass:passwordと直接passwordを指定することもできるが危険なのであまりしないこと。


活用場面

Chefのencrypted data bagみたいに、公開したくない情報をgithubに上げるときに使えそう。password.txtを.gitignoreするのを忘れずに。個人的にはdotfilesリポジトリに~/.ssh/configを入れるのに使用しようかと思っている。


オマケ

「パスワード」と「パスフレーズ」の違い。この記事を書いていたら気になったので。

https://technet.microsoft.com/ja-jp/library/dd362846.aspx