t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

gzipとOpenSSLを使ったファイル圧縮&暗号化&復号化

今回は特定フォルダ内のファイルを個別に圧縮&暗号化するBashスクリプトをご紹介。

挙動

Archiveフォルダに入れた複数ファイルを①gzipで圧縮し、②OpenSSLで暗号化し、③Encryptedフォルダに出力し、④処理済のオリジナルファイルはArchivedに移動させる。
f:id:t-hom:20220409175757p:plain

用途

最近自宅にSambaサーバーを立てたのだが、重要なファイルはこれだけでは障害時に不安が残るので、AWSのS3ストレージ等に自動転送しておきたい。
その際に流出対策として今回暗号化の仕組みを作成した。

暗号化するコード

今回はパスワードもコード内に入れてしまう。
クラウド保存時の流出対策なので、ローカルで見えてしまうのはまぁ良しとする。

#!/bin/bash
FILES="/home/thom/Test/Archive/*"
TIMESTAMP=`date +'%Y%m%d%H%M%S'`
PASSWORD="pass"

for f in $FILES
do
  echo "Encripting: $f"
  gzip -c $f | openssl enc -e -aes-256-cbc -pbkdf2 -iter 99999 -salt -k $PASSWORD -out /home/thom/Test/Encrypted/${TIMESTAMP}_$(basename -- $f).aes
  mv $f /home/thom/Test/Archived/
done

実行するとArchiveフォルダに入っているファイルが処理され、YYYYmmddHHMMSS_オリジナルファイル名.aesとしてEncryptedフォルダに保存される。
処理前のオリジナルはArchivedに移動される。

復号化するコード

これを実行するとEncryptedフォルダ内のファイルがDecryptedフォルダーに復号化される。

#!/bin/bash
FILES="/home/thom/Test/Encrypted/*"
PASSWORD="pass"
for f in $FILES
do
  echo "Decrypting: $f"
  openssl enc -d -aes-256-cbc -pbkdf2 -iter 99999 -salt -k $PASSWORD -in $f | gzip -d > /home/thom/Test/Decrypted/$(basename -- ${f%.*})
done

参考サイト

qiita.com
qiita.com

アーカイブと圧縮と暗号化について

Windows文化だとあんまり意識することなく、パスワード付きzipとして一緒くたにしているケースが多い。
本来はそれぞれ別の概念なので、軽く説明しておこうと思う。

アーカイブ

複数ファイルやフォルダ等を一つのファイルにまとめる機能。
Linuxだとtarコマンドが有名。

圧縮

特定の圧縮アルゴリズムを用いてファイルの容量を削減する機能。
Linuxだとgzipコマンドが有名。
Linuxでよく見かける.tar.gzという拡張子はtarでアーカイブした後にgzipで圧縮されているファイルということ。

暗号化

特定の暗号化アルゴリズムを用いてファイルの中身を第三者に知られないようにする機能。
Windowsのパスワード付きzipはツールを使えば比較的簡単に暗号化を破られると言われているので今回はOpenSSLというツールでAESというより強力な暗号化アルゴリズム使って暗号化した。

以上

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。