21
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ファイル暗号化/復号化スクリプト

Posted at

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
21
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?