2019/07/11(木)パスワードファイル暗号化(7zip 利用版)

はてブ数 2019/07/11 00:11 Macro::macro サンプル

パスワードファイル暗号化(7zip 利用版)

このサンプルマクロは、以下の仕様を満たすものとします。

マクロの目的

Tera Term の getpasswd コマンドで作成したパスワードファイルを、暗号化または解凍します。
暗号化・解凍はそれぞれ別のマクロとし、個別に実行可能とします。
また、共通する情報は設定ファイルを include して読み込むものとします。

なお、アーカイブ作成・解凍のための前提アプリに、コマンドライン版 7zip を利用します。
7zip は、GNU LGPL ライセンスによって開発されているアーカイバです。
https://sevenzip.osdn.jp/

利用可能環境

Windows (7zip)
7zip を利用するための環境は、以下の通りです。

インストールディレクトリ = C:\7za920
実行ファイル名 = 7za.exe

※ 上記フォルダは、マクロの設定ファイルで任意のものに書き換えることが可能です。

サンプルスクリプトでは、コマンドライン版 7zip を上記フォルダに格納していることが前提です。
マクロの設定ファイルを、環境に合わせて書き換えてください。
Teraterm
依存する Tera Term バージョン:
・Tera Term バージョン 4.69 以降*1

・利用する Tera Term コマンド:
種別:制御Ver機能の簡易説明
endマクロの実行そのものを終了する。
if,then,elseif,else,endif条件分岐
includeインクルードファイルに移る。
種別:文字列操作Ver機能の簡易説明
sprintf24.62以降フォーマットされた出力を返す。
strspecial4.67以降特殊文字を変換する。
種別:ファイル操作Ver機能の簡易説明
filedeleteファイルを削除する。
filesearchファイルまたはフォルダがあるか確かめる。
foldersearch4.69以降フォルダがあるか確かめる。
getdirMACRO の現在のディレクトリを得る。
makepathフルパス名を作成する。
種別:パスワードコマンドVer機能の簡易説明
passwordboxパスワードを入力するためのダイアログボックスを開く。
4.54以降特殊文字の解釈を制御するオプションの追加。
種別:その他Ver機能の簡易説明
execアプリケーションを起動する。
4.63以降起動したアプリケーションの終了を待つオプションの追加。
4.78以降カレントディレクトリを指定するオプションの追加。
messageboxダイアログボックスを開き、ユーザーにメッセージを知らせる。
4.54以降特殊文字の解釈を制御するオプションの追加。
4.60以降キャンセル時にマクロ停止を確認する機能の追加。
サンプルスクリプトでは getpasswd コマンドで生成するファイルは、マクロファイルと同じフォルダに置いてあることが前提です。
適宜、マクロの設定ファイルで任意のものに書き換えてください。

マクロの使い方

実行タイミング
任意のタイミングで実行が可能です。
ファイル名利用目的
PasswdCnf.ttlPasswdArc.ttl および PasswdExt.ttl の共通設定ファイルです
PasswdArc.ttl入力パスワードで、パスワードファイルを暗号化 zip にします
PasswdExt.ttl暗号化 zip を入力パスワードで解凍します
上記サンプルマクロのうち、ログインに使用しないときは PasswdArc.ttl で暗号化しておき、ホストへアクセスしたいときに PasswdExt.ttl で解凍する利用方法を念頭に開発しています。
マクロの指定方法
詳細は TeraTerm マクロの使い方 を参照してください。
ttpmacro.exe を利用する場合
ファイルの拡張子 .ttl を ttpmacro.exe へ関連付けしておきます。
.ttl ファイルをダブルクリック等で実行します。
ttermpro.exe を利用する場合
ttermpro.exe を利用する場合は、起動時にオプションへ /M=xxx.ttl のように指定します。
メニューから実行する場合
Tera Term メニューから「コントロール(O)」→「マクロ(M)」を選択します。
対象ファイルを選択して「開く」ボタンをクリックすると、実行されます。

*1 : 保存する文字コードによっては Tera Term バージョン 4.102 以降

コード

著作権情報

7zip に関する著作権は、7zip 開発プロジェクトおよび参加されている開発者が所有しています。
https://sevenzip.osdn.jp/ を参照してください。
以下、著作権情報はサンプルマクロに限定して記述します。

このサンプルマクロに関する著作権は、当サイト管理者が所有しています。
著作権者
神場 和也
ライセンス
3条項BSDライセンス
関連情報
(なし)

サンプルコード

ファイルダウンロード
passwdファイル暗号化.zip

次のソースファイル 3 点をセットにしたものです。
ファイル名利用目的
PasswdCnf.ttlPasswdArc.ttl および PasswdExt.ttl の共通設定ファイルです
PasswdArc.ttl入力パスワードで、パスワードファイルを暗号化 zip にします
PasswdExt.ttl暗号化 zip を入力パスワードで解凍します
※ 解凍してご利用ください。
項目内容
文字コードShift JIS
実行確認バージョンTera Term Ver 4.102
備考下記コピペ用ソースコードをファイルに保存したものです。
コピペ用
以下のソースコードをファイルに保存のうえご利用ください。

※ UTF-8 で保存した場合は、Tera Term Ver 4.102 以降で実行する必要があります。詳細は マクロファイルの仕様 を参照してください。

・include 対象となる PasswdArc.ttl および PasswdExt.ttl の共通設定ファイル
想定ファイル名:PasswdCnf.ttl
; 7zip Archive macro of Tera Term
; ----------------------------------------------------------
; File: PasswdCnf.ttl
; Description: PasswdArc.ttl および PasswdExt.ttl の共通設定
; Environment: generic
; Update: 2019/6/21
; Author: Kazuya Jimba
; Site: http://ttm.jimba.ddo.jp/adiary.cgi/teraterm
; Special Thanks
;       https://sevenzip.osdn.jp/chm/cmdline/syntax.htmx
; ----------------------------------------------------------

;; ディレクトリ関係

; 7zip 実行ファイルの格納ディレクトリ
_7zipDir = 'C:\7za920'

; パスワードファイルの格納ディレクトリ
getdir _pwdir


;; ファイル名関係

; 7zip 実行ファイル名
_7zipExe = '7za.exe'

; getpasswd で使用するパスワードファイル名
_pwfile = 'password.dat'

; 圧縮ファイル名
_pwArchive = 'passwd.zip'

;; パス生成
makepath _7zip  _7zipDir _7zipExe
makepath _pwdat _pwdir   _pwfile
makepath _pwzip _pwdir   _pwArchive

・指定したパスワードでアーカイブするマクロ
想定ファイル名:PasswdArc.ttl
; 7zip Archive macro of Tera Term
; ----------------------------------------------------------
; File: PasswdArc.ttl
; Description: getpasswd で作成したパスワードファイルを、
;              指定したパスワードでアーカイブするマクロ。
;              アーカイバには 7zip を利用する。
; Environment: generic
; Update: 2019/6/21
; Author: Kazuya Jimba
; Site: http://ttm.jimba.ddo.jp/adiary.cgi/teraterm
; Special Thanks
;       https://sevenzip.osdn.jp/chm/cmdline/syntax.htmx
; ----------------------------------------------------------

;;; 変数設定 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

includePath = 'PasswdCnf.ttl'

;;; メイン処理 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; 暗号化処理共通ファイルを読み込む。
include includePath

;; 対象が存在するか確認する。
filesearch _pwdat
if result = 1 then
    foldersearch _pwdat
    if result = 1 then
        sprintf2 msg '%s はフォルダであるため終了します。' _pwdat
        messagebox msg 'Error'
        end
    endif
else
    sprintf2 msg 'ファイル %s が存在しないため終了します。' _pwdat
    messagebox msg 'Error'
    end
endif

;; パスワード情報取得
_msgtitle = 'パスワード入力'
_msgline = 'パスワードファイルを暗号化します。\n暗号化用パスワードを入力してください。\n'
strspecial _msgline

passwordbox _msgline _msgtitle 1
_filepassword = inputstr

;; 圧縮コマンドの生成
sprintf2 _ArcCmd "%s a -tzip -p%s %s %s" _7zip _filepassword _pwzip _pwdat

; 暗号化処理コマンドラインを実行する。
exec _ArcCmd 'hide' 1

; 元ファイルを削除する。
filedelete _pwdat
if result = 1 then
    sprintf2 msg 'ファイル %s が削除できませんでした。' _pwdat
    end
endif

;;; 終了処理 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

end

・指定したパスワードで解凍するマクロ
想定ファイル名:PasswdExt.ttl
; 7zip Archive macro of Tera Term
; ----------------------------------------------------------
; File: PasswdExt.ttl
; Description: getpasswd で作成したパスワードファイルを、
;              指定したパスワードで解凍するマクロ。
;              アーカイバには 7zip を利用する。
; Environment: generic
; Update: 2019/6/21
; Author: Kazuya Jimba
; Site: http://ttm.jimba.ddo.jp/adiary.cgi/teraterm
; Special Thanks
;       https://sevenzip.osdn.jp/chm/cmdline/syntax.htmx
; ----------------------------------------------------------

;;; 変数設定 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

includePath = 'PasswdCnf.ttl'

;;; メイン処理 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; 暗号化処理共通ファイルを読み込む。
include includePath

;; 対象が存在するか確認する。
filesearch _pwzip
if result = 1 then
    foldersearch _pwzip
    if result = 1 then
        sprintf2 msg '%s はフォルダであるため終了します。' _pwzip
        messagebox msg 'Error'
        end
    endif
else
    sprintf2 msg 'ファイル %s が存在しないため終了します。' _pwzip
    messagebox msg 'Error'
    end
endif

;; パスワード情報取得
_msgtitle = 'パスワード入力'
_msgline = 'パスワードファイルを復号化します。\n復号化用パスワードを入力してください。\n'
strspecial _msgline

passwordbox _msgline _msgtitle 1
_filepassword = inputstr

;; 解凍コマンドの生成
sprintf2 _ExtractCmd "%s x -tzip -p%s %s -o%s" _7zip _filepassword _pwzip _pwdir

; 暗号化処理コマンドラインを実行する。
exec _ExtractCmd 'hide' 1

; 元ファイルを削除する。
filedelete _pwzip
if result = 1 then
    sprintf2 msg 'ファイル %s が削除できませんでした。' _pwzip
    end
endif

;;; 終了処理 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

end

備考

特にありません。