■VBScriptで暗号化/復号化する (記:2008/05/18、更新:2008/05/19)
VBScriptでWMIなどを使用していると、パスワードを暗号化しておきたい場面などに出くわすだろう。
大抵はメンドウなのでそのまま埋め込んだりパラメータ渡しにしたりしていると思うが、タスクスケ
ジューラ上でスクリプトを実行させたりする際には、セキュリティも考慮しなければならない。Windows上で暗号化/復号化を行うにはCrypto APIを利用したいところだが、COM化したMicrosoft
社製CAPICOMを使うには、別途ダウンロード&インストールが必要になってしまう。(タダではあるが)
ダウンロードはともかく、インストールとなると制限を受けるユーザアカウントも学校や企業といった
所では十分考えられるだろう。
そこで、ここではOS標準機能だけで暗号化/復号化する手段を考えてみた。※ 多分IEの機能を使っているのだと思われるので、あんまり古いIEだと出来ないかもしれない。
Windows2000以降&IE6以降なら問題ないと思うが...勘が良いというか他言語にも詳しい方なら気づいたかもしれないが、CreateObjectしているモジュール
「System.Security.〜」は .NET Framework のクラス定義と同じである。だが、別に .NET Framework が
インストールされている必要はない(インストールされてなくても動く)。 .NET Framework の方がOS標準
の機能として取り込んでいるのだろう。
<注意>
暗号化カギや暗号化された値を外部や他のアカウントから読み取られないように考慮すること!
特に暗号化カギを保存する場合は、保存先のセキュリティや保存方法(最低でもパッと見で分からない
程度にはしておくことを薦める)には最新の注意を払うこと。
' 定義
' Original
' バイナリを扱うために ADODB.Stream を使用する
' レジストリの「HKEY_CLASSES_ROOT\System.Security.Cryptography.〜Provider」
群を
' Encrypt
objStream.Type = adTypeText
' ストリームをバイナリ指定にしてvbSafeArray(配列)をEncrypt に渡して暗号化する
' XMLでカギ情報を出力(True:秘密カギと公開カギを出力、False:公開カギのみ出力)
' 暗号化カギを格納しているXMLを入力する(XMLは保存先から別途何らかの方法で読み込むこと)
' Decrypt
' ストリームをバイナリ指定にしてvbSafeArray(配列)をDecrypt に渡して復号化する
' Unicode Textのバイトオーダーを示す BOM コードを削除する
' 終了処理 |
Copyright(C) RainyLain 2008