-
Notifications
You must be signed in to change notification settings - Fork 3
/
dec
executable file
·83 lines (73 loc) · 2.94 KB
/
dec
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/usr/bin/env sh
# 軽量ファイルの復号スクリプト (UTF-8)
# ====================================
#
# GitHub 上で公開されている(https://github.com/<user name>.keys で取得できる)
# 自身の RSA 公開鍵を使って暗号化されたファイルを復号/平文化します。
#
# - 使い方の例:
# 以下のコマンドで復号された'himitsu.txt' が作成されます。
# $ ./dec.sh ../.ssh/private key himitsu.txt.enc himitsu.txt
#
# - 注意:利用前にスクリプトに実行権限を与えるのを忘れないでください。
#
# -----------------------------------------------------------------------------
# Requirement check
# -----------------------------------------------------------------------------
if ! type openssl 2>/dev/null 1>/dev/null; then
echo >&2 '復号化に必要な openssl コマンドがインストールされていません。'
exit 1
fi
# ヘルプ表示
# ----------
if [ $# -lt 3 ]; then
echo
echo "使い方: $0 <private key> <input file> <output file>"
echo
echo "- <private key> : GitHub で公開している公開鍵のペアとなる秘密鍵のパス"
echo "- <input file> : 暗号化されたファイルのパス"
echo "- <output file> : 復号/平文化されるファイルのパス"
echo
exit 1
fi
# コマンド引数取得
# ----------------
SECRETKEY="$1"
INPUTFILE="$2"
OUTPUTFILE="$3"
if [ ! -r "$SECRETKEY" ]; then
echo >&2 "秘密鍵ファイル ${SECRETKEY} が見つかりません。"
exit 1
fi
if ! RESULT="$(openssl rsa -in "${SECRETKEY}" -text 2>&1 >/dev/null)"; then
echo >&2 "秘密鍵ファイル ${SECRETKEY} がサポートしていないフォーマットです。"
echo >&2
echo >&2 "Error(openssl)"
echo >&2 "$RESULT"
exit 1
fi
if [ ! -r "$INPUTFILE" ]; then
echo >&2 "暗号化されたファイル ${INPUTFILE} が見つかりません。"
exit 1
fi
# テキストへ復号
# --------------
# 参考URL : https://qiita.com/kunichiko/items/3c0b1a2915e9dacbd4c1
printf "%s" "ファイルを復号しています ... "
if ! openssl rsautl -decrypt -inkey "$SECRETKEY" -in "$INPUTFILE" -out "$OUTPUTFILE"; then
echo >&2 "NG:復号中にエラーが発生しました。以下の内容が考えられます。"
echo >&2 " - 暗号ファイルが渡されていない"
echo >&2 " - 暗号化に使われた公開鍵と違うペアの秘密鍵を使っている"
echo >&2 " - 1 ブロック以上のデータ(長すぎる暗号データ)を復号している"
echo >&2 "[注意]:"
echo >&2 "GitHub で公開されている公開鍵のうち 1 番上の公開鍵のペアの秘密鍵を使っているか確認してください。'check.sh'スクリプトで動作確認をおすすめします。"
rm "$OUTPUTFILE"
exit 1
fi
echo "OK"
# 終了表示
# --------
echo
echo "ファイルを復号しました。"
echo "復号済みファイル: ${OUTPUTFILE}"
echo