2017-10-06 6 views
2

VBScriptにコードを書き込んで、特定のファイルの SHA512値を計算しようとしています。 MSFTのドキュメント によると、SHA512ManagedオブジェクトのComputeHashメソッドには、入力として バイト配列が必要です。だから、私は SHA512の値が計算される入力ファイルを読み込むためにADODBを使用しました(AFAIKのため、VBScriptでバイト配列を作成するには がありません)。しかし、私はランタイムエラー5を取得 メソッドを呼び出すときに 'プロシージャコールまたは引数が無効です'。下のコードの 可変長はByte()型です - VBScriptは言います。VBScriptエラー5 'System.Security.Cryptography.SHA512Managed'でsha512を計算しようとしています

誰かが間違っていると教えてもらえますか?

コード:

Option Explicit 
' 
' 
' 
Dim scs, ado    
Dim bar, hsh 

Set scs = CreateObject("System.Security.Cryptography.SHA512Managed") 
Set ado = CreateObject("ADODB.Stream") 

ado.type = 1 ' TypeBinary 
ado.open 
ado.LoadFromFile WScript.ScriptFullName 
bar = ado.Read 
ado.Close 

MsgBox TypeName(bar) & "/" & LenB(bar) & "/" & Len(bar),,"Box 1" 
' Displays : "Byte()/876/438" 

On Error Resume Next 
' Attempt 1 
Set hsh = scs.ComputeHash(bar) 
MsgBox Hex(Err.Number) & "/" & Err.Description,,"Set hsh = " 
' Displays : "5/Invalid procedure call or argument" 

' Attempt 2 
hsh = scs.ComputeHash(bar) 
MsgBox Hex(Err.Number) & "/" & Err.Description,,"hsh = "  
' Displays : "5/Invalid procedure call or argument" 

MsgBox TypeName(scs),,"scs" ' Displays : "SHA512Managed" 

Set ado = Nothing 
Set scs = Nothing 

WScript.Quit 
+0

バーは、実行しているスクリプトを参照しています。使用していないファイルを参照する同じエラーが発生しますか? – Sorceri

答えて

3

使用

hsh = scs.ComputeHash_2((bar)) 

(NOセットは、_2サフィックス値渡し、他のComputeHashメソッドを選択しない())

here参照します。

+0

ありがとう、Merci beaucoup Ekkehard。それはうまく動作します。 – LeChatDeNansen

+0

またリンクに感謝します。尖っているコードは、冷静で、明確で効率的です。 – LeChatDeNansen

関連する問題