从内存中而不是从文件中散列文本

时间:2017-07-12 12:22:10

标签: vbscript

我想将密码'HelloWorld'哈希到MD5。以下代码摘自Generating the hash value of a file。问题是,使用提供的代码,我需要在对文件进行散列之前将密码保存到文件中。我怎么能把它传递到内存中?我对vbs感到非常不舒服,请原谅。我不知道什么类型的二进制文件在vbs中。

Option Explicit
MsgBox("Md5 Hash for 'HelloWorld': " & GenerateMD5("HelloWorld"))

Public Function GenerateMD5(ByRef hashInput)
  'hashInput is the plain text hash algorithm input
  Dim oMD5           : Set oMD5 = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider") 
  oMD5.Initialize()
  Dim baHash         : baHash = oMD5.ComputeHash_2(GetBinaryFile("D:/HASHINPUT.txt"))  
  GenerateMD5 = ByteArrayToHexStr(baHash) 
End Function

Private Function ByteArrayToHexStr(ByVal fByteArray)
    Dim k
    ByteArrayToHexStr = ""
    For k = 1 To Lenb(fByteArray)
        ByteArrayToHexStr = ByteArrayToHexStr & Right("0" & Hex(Ascb(Midb(fByteArray, k, 1))), 2)
    Next
End Function

Private Function GetBinaryFile(filename)
  Dim oStream: Set oStream = CreateObject("ADODB.Stream")
  oStream.Type = 1 'adTypeBinary
  oStream.Open
  oStream.LoadFromFile filename
  GetBinaryFile = oStream.Read
  oStream.Close
  Set oStream = Nothing
End Function

1 个答案:

答案 0 :(得分:0)

我怀疑您需要为Byte()输入数据类型ComputeHash_2()。 VBScript本身无法创建该数据类型,但您应该能够使用ADODB.Stream对象将字符串转换为字节数组,而无需先将其写入文件。像这样:

pwd = "foobar"

Set stream = CreateObject("ADODB.Stream")
stream.Mode = 3     'read/write
stream.Type = 2     'text
stream.Charset = "ascii"
stream.Open
stream.WriteText pwd
stream.Position = 0 'rewind
stream.Type = 1     'binary
bytearray = stream.Read
stream.Close