Skip to content

Instantly share code, notes, and snippets.

@shiv3
Last active December 8, 2015 10:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shiv3/2b319abc62c31c87a218 to your computer and use it in GitHub Desktop.
Save shiv3/2b319abc62c31c87a218 to your computer and use it in GitHub Desktop.
暗号化するやつ

##ファイルを暗号化するシェルスクリプト

この記事は OIC ITCreate Club Advent Calendar 2015 8日目(12/8)の記事です。

見られたくないファイルを暗号化する便利そうなスクリプトを書いてみました。

$ chmod u+x vvvencryp.sh  

使い方

./vvvencryp.sh [-p passfile] file,dir 

-p オプションで暗号化に使うパスワードファイルを指定します。

$ file *
test.png: PNG image data,~
$ ./vvvencryp.sh -p passfile test.png 
$ file *
test.vvv: data

暗号化されたファイルは、暗号化されたことがわかりやすいように拡張子がvvvに変わります。

ディレクトリを指定すると、指定ディレクトリ以下のファイルを全て暗号化します。

$ find test
test
test/test.js
test/test.png
test/test.txt
test/test2.txt
test/testdir
test/testdir/test.csv
test/testdir/test.dat
test/testdir/test2.dat

$ ./vvvencryp.sh -p pass.txt test
$ find test
test
test/test.vvv
test/test.vvvv
test/test.vvvvv
test/test2.vvv
test/testdir
test/testdir/test.vvv
test/testdir/test.vvvv
test/testdir/test2.vvv

-pオプションを指定しない場合は勝手にパスワードファイルが作成されます。

$ ./vvvencryp.sh test.png 
keygen:vvenckey

###余

  • 拡張子を記録しておくために、暗号化前にtar形式にした。
  • 鍵の管理はrsaとかで暗号化しておくと良いかもしれない。
  • 拡張子をvvvにしたとき被ったらvを増やすことで解決した
  • ファイル名にスペースが入ったときとか困る
  • curlから実行する方法
curl -fsSL  https://gist.githubusercontent.com/shiv3/2b319abc62c31c87a218/raw/a071e60c7db72f9d6f34e2bb2be6c89bb635829f/vvvencryp.sh  | bash /dev/stdin -p passfile test.png 
#!/bin/sh
usage_exit() {
echo "Usage: $0 [-p passfile] dir " 1>&2
exit 1
}
if [ $# == 0 ]; then
usage_exit
fi
FLAG_V=0
while getopts vp:h OPT
do
case $OPT in
v) FLAG_V=1
;;
p) passfile=$OPTARG
;;
h) usage_exit
;;
\?) usage_exit
;;
--) usage_exit;;
esac
done
shift $((OPTIND - 1))
if [ "$passfile" == "" ]; then
echo "keygen:vvenckey"
openssl genrsa > vvenckey
passfile=vvenckey
fi
argv=$1
for file in `find ${argv%/} -type f`
do
fname_nd=${file##*/}
fname=${fname_nd%.*}
fextension=${file##*.}
fdir=${file%/*}
nextentpath=$fdir/$fname
while [ -e $nextentpath ]
do
nextentpath=$nextentpath"_"
done
if [ $FLAG_V == 1 ]; then
tar cvf $nextentpath $file
else
tar cf $nextentpath $file
fi
extension="vvv"
while [ -e $nextentpath.$extension ]
do
extension=$extension"v"
done
openssl enc -e -aes256 -in $nextentpath -out $nextentpath.$extension -kfile $passfile
rm $file
rm $nextentpath
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment