小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


VBScriptで一方向ハッシュ関数を利用する方法

はじめに

このエントリでは、VBScriptで一方向ハッシュ関数を使って、ハッシュ値を生成する方法について書いています。

結論

VBScriptにはSHA1やMD5といったアルゴリズムを用いてハッシュ値を生成する関数がありません。
このため、ハッシュ値の生成が必要な場合には、自力でハッシュ関数を作成するか、あるいは、以下に記載する方法で、外部のDLLを用いて、ハッシュ値を生成する必要があります。

MicrosoftのMicrosoft CAPICOMでハッシュ値を生成する

VBScriptでハッシュ関数を利用するには、Microsoftが無償で提供するCapicom.dllを利用します。手順は、以下のとおりです。
1.はじめにMicrosoftのページからCapicom.dllをダウンロードします。

2.ダウンロードしたファイルをダブルクリックして、インストーラを起動します。ウィザードに従い、Microsoft CAPICOMをインストールします。





3.インストールが完了すると、C:\Program Files\Microsoft CAPICOM 2.1.0.2 SDK\Lib\X86の下にcapicom.dllというファイルが存在します。続いて、コマンドプロンプトで以下のコマンドを実行し、このcapicom.dllをレジストリ登録します。

cd "C:\Program Files\Microsoft CAPICOM 2.1.0.2 SDK\Lib\X86"
regsvr32 capicom.dll

これで、Microsoft CAPICOMの準備は完了です。

VBScriptからMicrosoft CAPICOMを利用する

VBScriptからMicrosoft CAPICOMを利用するには、以下のサイトのコードが参考になります。

サンプルコードをまるごと引用で申し訳ないのですが、次のようなコードを書きます。

Option Explicit

Function DoHashCommand(ByVal lngAlgorithm, ByVal strContent)
    Dim strHashValue    ' ハッシュ値
    Dim objHashedData   ' ハッシュ作成用

    On Error Resume Next
    strHashValue = ""

    Set objHashedData = CreateObject("CAPICOM.HashedData")
    If Err.Number = 0 Then
        objHashedData.Algorithm = lngAlgorithm
        objHashedData.Hash strContent
        If Err.Number = 0 Then
            strHashValue = objHashedData.Value
        Else
            WScript.Echo "エラー: " & Err.Description
        End If
    Else
        WScript.Echo "エラー: " & Err.Description
    End If

    Set objHashedData = Nothing
    DoHashCommand = strHashValue
End Function

Dim strContent  ' ハッシュ作成文字列
Dim strAlgo     ' ハッシュアルゴリズム
Dim lngLoop     ' ループカウンタ

strContent = "hash test"
strAlgo = Array("SHA1", "MD2", "MD4", "MD5")

WScript.Echo "文字列: " & strContent
For lngLoop = 0 To UBound(strAlgo)
    WScript.Echo strAlgo(lngLoop) & ": " & _
        DoHashCommand(lngLoop, strContent)
Next

このスクリプトを名前をつけて保存し、コマンドプロンプトから実行すると以下のような結果が得られます。

C:\work>cscript HashGenerater.vbs
Microsoft (R) Windows Script Host Version 5.7
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

文字列: hash test
SHA1: DCB12E70AFEE6D8A86091767CC753851305C043A
MD2: 785176A0CB72FF8E3BA9C0B6F8141E49
MD4: E0C287023917CEE9E539300BACAD08A2
MD5: 1E25FCDC4379021015CDED273988470A

ちなみにcapicom.dllのレジストリ登録を行う前にこのスクリプトを実行すると、以下のような結果となってしまいます。

文字列: hash test
エラー: ActiveX コンポーネントはオブジェクトを作成できません。
SHA1:
エラー: ActiveX コンポーネントはオブジェクトを作成できません。
MD2:
エラー: ActiveX コンポーネントはオブジェクトを作成できません。
MD4:
エラー: ActiveX コンポーネントはオブジェクトを作成できません。
MD5: