Windows10 でCAPICOM.Utilities を使用するには、こちらからダウンロードしてインストールが必要です。 但し 32 ビットでインストールされるので、VBScript で実行する際に、『C:\Windows\SysWOW64\cscript.exe』で実行する必要があります。 ( または C:\Windows\SysWOW64\wscript.exe ) ドキュメント 以下の方法と同様で、バイナリファイルの変換に使う事が可能です。(PHPの文字列はバイナリ扱いです) 結果は PHP の関数で同じになる事を確かめています。 ( php -r "print hash('sha256','変換する文字列');" ) 変換する種類は、こちらの定数を使用します(HashedData.Algorithm)( VBscript で最後に小文字に変換してますが、PHP の結果と合わす為です ) Base64 の変換では、本来良く使われて来た用途としてバイナリデータのテキスト表現で、メールの添付ファイルに使用する際に改行を含めて76文字になるようになっています。CAPIUtil.Base64Encode の仕様もそうなっているので、PHP と比較する為に、ここではわざわざ改行を取り除いています。 それと、CAPICOM.HashedData で作成したオブジェクトを使いまわすとエラーになる事があったので、毎回作成して処理しました。
Set CAPIUtil = Wscript.CreateObject( "CAPICOM.Utilities" ) Set Stream = Wscript.CreateObject("ADODB.Stream") Set StreamBin = Wscript.CreateObject("ADODB.Stream") '*********************************** ' Base64 '*********************************** Stream.Open Stream.Charset = "shift_jis" ' shift_jis で入力文字を書き込む Stream.WriteText "日本語表示OK日本語表示OK日本語表示OK日本語表示OK日本語表示OK" Stream.Position = 0 ' バイナリで開く StreamBin.Open StreamBin.Type = 1 ' テキストをバイナリに変換 Stream.CopyTo StreamBin Stream.Close ' 読み込みの為にデータポインタを先頭にセット StreamBin.Position = 0 str = CAPIUtil.ByteArrayToBinaryString( StreamBin.Read ) str2 = CAPIUtil.Base64Encode( str ) ' ' 長い文字列は仕様として、(\r\n を含めて 76文字で) 改行されます str2 = Replace(str2,vbCrLf,"") Wscript.Echo str2 '*********************************** ' SHA1,SHA256,SHA384,SHA512 と MD5 '*********************************** ' SHA1 Set HashedData = Wscript.CreateObject( "CAPICOM.HashedData" ) HashedData.Algorithm = 0 HashedData.Hash(str) Wscript.Echo LCase(HashedData.Value) ' SHA256 Set HashedData = Wscript.CreateObject( "CAPICOM.HashedData" ) HashedData.Algorithm = 4 HashedData.Hash(str) Wscript.Echo LCase(HashedData.Value) ' SHA384 Set HashedData = Wscript.CreateObject( "CAPICOM.HashedData" ) HashedData.Algorithm = 5 HashedData.Hash(str) Wscript.Echo LCase(HashedData.Value) ' SHA512 Set HashedData = Wscript.CreateObject( "CAPICOM.HashedData" ) HashedData.Algorithm = 6 HashedData.Hash(str) Wscript.Echo LCase(HashedData.Value) ' MD5 Set HashedData = Wscript.CreateObject( "CAPICOM.HashedData" ) HashedData.Algorithm = 3 HashedData.Hash(str) Wscript.Echo LCase(HashedData.Value)