openssl(1) を実行してファイルを暗号化/復号化する処理を簡易的に実行するための簡単なシェルスクリプトによる wrapper を作成しました。
暗号化/復号化は openssl(1) の enc コマンドに暗号化アルゴリズムとして aes-128-cbc を指定して実施しています。
指定されたファイルの先頭 8 バイトを参照して Salted__ の場合は暗号化されていると仮定し復号化、それ以外は暗号化する処理をデフォルトで実行しますが、実行時オプション -d、-e を指定する事で強制的に暗号化/復号化を指定する事も可能です。
-p オプションでパスワードを指定してバッチ処理も実行できますが、コマンド実行履歴等にパスワードが平文で残るのでお勧めできません。
暗号化/復号化が成功した場合は元のファイルを置き換えます。
cipher
#!/bin/sh
#
# All rights reserved, copyright (c) 2011, Mitzyuki IMAIZUMI
# $Id: cipher,v 1.1 2011/02/09 10:32:09 mitz Exp $
#
myname=${0##*/}
tmpfile=${TMP:-/tmp}/${myname}.$$
enc="openssl enc -e -aes-128-cbc -in "
dec="openssl enc -d -aes-128-cbc -in "
trap 'rm -r ${tmpfile}; exit' 0 1 2 3 9 15
if opt=`getopt dep: $*`
then
set -- ${opt}
while [ -n "${1}" ]
do
case "${1}" in
-d )
force=${dec};;
-e )
force=${enc};;
-p )
pass="-pass pass:${2}"
shift;;
-- )
shift
break;;
esac
shift
done
else
echo "Usage: ${myname} [-d][-e][-p pass] file[, ... file]" 1>&2
exit 255
fi
for i
do
if [ -f ${i} ]
then
if [ -z "${force}" ]
then
# magic number を取得してファイル種別を自動判別
# バイナリファイルからの read なので dd(1) を利用
if [ "`dd if=${i} bs=8 count=1 2> /dev/null`" = "Salted__" ]
then
command=${dec}
else
command=${enc}
fi
else
command=${force}
fi
# 暗号化/復号化が成功した場合は元ファイルを置換
${command} ${i} -out ${tmpfile} ${pass} && mv ${tmpfile} ${i}
else
echo "${myname}: cannot open ${i} for input" 1>&2
fi
done