それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

openssl コマンドで ファイルを暗号化

ファイルをパパっと暗号化

なにか読まれたくないファイルを暗号して送りますと思った。 そりゃまぁHTTPSで送ればいいんだろうけど、

リンクを本文入れたらメール消されたり、 メールでzip添付も送れない世の中じゃ。。。世知辛い

ファイルを暗号化

ファイルを暗号化にするには、超かんたんでOpensslコマンドを使う。

openssl aes-256-cbc -e -salt  -in my_file -out  encrypted_my_file

ファイルを復号化

opensslでファイルを復号化することが出来る。

openssl aes-256-cbc -d -in encrypted_my_file -out  

他にもオプションはある

出力ファイルをbase64にしておく

オプションに、-base64 をつければ、出来上がったファイルはBASE64の形式になる。

takuya@rena:~$ openssl aes-256-cbc -e -salt -in test -out test.en -pass file:accountImage.jpg -base64
takuya@rena:~$ cat test.en
U2FsdGVkX188S3Vx9evNkKjB69oQj4+M4O9mkkha6nU=

base64 の形式なら何でもありですね。SQLでRDMSに保存するのも楽そう。

パスフレーズをファイルから取得する

どこにでもある、id_rsaを鍵にする。

takuya@rena:~$ openssl aes-256-cbc -e -salt -in test -out test.en -pass file:.ssh/id_rsa
takuya@rena:~$ openssl aes-256-cbc -e -salt -in test.en -out test.de -pass file:.ssh/id_rsa

2015/08/10 訂正

pass に file:path/to/file を指定したら、ファイルの先頭行を利用するので、id_rsa を使うのは非常にやばかった。

file:pathname

the first line of pathname is the password. If the same pathname argument is supplied to -passin and -passout arguments then the first line will be used for the input password and the next line for the output password. pathname need not refer to a regular file: it could for example refer to a device or named pipe. https://www.openssl.org/docs/apps/openssl.html#file%3Apathname

たとえば、OSXのログインアカウントの写真を鍵にするには

cd 
dscl . -read /Users/takuya JPEGPhoto | tail -1 | xxd -r -p > accountImage.jpg
openssl aes-256-cbc -e -salt -in test -out test.en -pass file:accountImage.jpg

などと出来る。鍵になるのはパスフレーズなんでもいいわけで。

たとえば、ログインアカウントの写真を鍵に使ったがこれは鍵になるファイルが取り出しはカンタンだけど、ホームディレクトリ以下ファイルを総当りから探すのは難しいという点にある。