生成文件的哈希值

编程入门 行业动态 更新时间:2024-10-09 08:25:57
本文介绍了生成文件的哈希值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我已经设法收集代码并尝试生成文件的哈希值,但在当前代码中,我需要将文件拖到VBScript上,然后给出哈希值。

有人可以帮我重写代码,我可以选择文件夹或一组文件,并且可以生成散列值并将其写入记事本文件中。

附加下面的代码。

Dim objFile,objFolder,objFSO Dim Arg,strText strText = Set objFSO = CreateObject(Scripting.FileSystemObject) 如果WScript.Arguments.Count> 0然后对于Wscript.Arguments中的每个Arg Arg = Trim(Arg)如果InStr(Arg,。)然后 strText = strText& 文件名:& Arg& vbNewLine 如果doMd5那么 strText = strText& MD5 - >& md5(Arg)& vbNewLine 结束如果结束如果下一个结束如果 '= 0参数表示使用双击md5.vbs(或可能通过没有文件名参数的命令行) Dim fName 如果WScript.Arguments.Count = 0那么 fName = ChooseFile(。)如果fName<> ; 然后 strText = strText& 文件名:& fName& vbNewLine 如果doMd5那么 strText = strText& MD5 - >& md5(fName)& vbNewLine End If Wscript.echo strText'需要这样才能防止事情在向记事本插入数据时变得疯狂(确保记事本是顶部窗口) End If End If '如果用户在打开的文件对话框中取消文件选择,则优雅地退出如果strText =然后 Dim strExit strExit =没有选择文件,优雅地退出...和& vbNewLine strExit = strExit +别忘了你也可以将文件拖放到这个脚本上。 &安培; vbNewLine strExit = strExit +或者使用脚本中详细描述的发送到右键上下文菜单。 &安培; vbNewLine MsgBox strExit,0,MD5.VBS WScript.Quit End If Dim WshShell Set WshShell = WScript.CreateObject( WScript.Shell) WshShell.Runnotepad,3 WScript.Sleep 500 WshShell.SendKeys strText 函数md5(文件名)默认MSXML,EL,MD5Obj 设置MD5Obj = CreateObject(System.Security.Cryptography.MD5CryptoServiceProvider) MD5Obj.ComputeHash_2(readBinaryFile(filename)) Set MSXML = CreateObject(MSXML2.DOMDocument) Set EL = MSXML.CreateElement(tmp) EL.DataType =bin.hex EL.NodeTypedValue = MD5Obj.Hash md5 = EL.Text End Function 函数readBinaryFile(文件名) Const adTypeBinary = 1 Dim objStream Set objStream = CreateObject(ADODB.Stream) objStream.Type = adTypeBinary objStream.Open 如果文件名<> 然后 objStream.LoadFromFile文件名'稍作修改以防止错误消息如果没有选择文件结束如果 readBinaryFile = objStream.Read objStream.Close Set objStream = Nothing End Function Dim shell,defaultLocalDir,objWMIService,colItems,objItem,ex Set shell = CreateObject(WScript.Shell) defaultLocalDir = shell.ExpandEnvironmentStrings(%USERPROFILE%)& \Desktop Set shell = Nothing 函数ChooseFile(ByVal initialDir) Set objWMIService = GetObject(winmgmts:\\.\root\cimv2 ) Set colItems = objWMIService.ExecQuery(Select * from Win32_OperatingSystem) Dim winVersion winVersion = CInt(Left(objItem.version,1) ) Next Set objWMIService = Nothing Set colItems = Nothing 如果(winVersion< = 5)则 Set cd = CreateObject(UserAccounts .CommonDialog) cd.InitialDir = initialDir cd.Filter =ZIP文件| * .zip |文本文档| * .txt | Shell脚本| *。* sh |所有文件| *。* cd.FilterIndex = 4 If cd.ShowOpen = True Then ChooseFile = cd.FileName Else ChooseFile = End If Set cd = Nothing 其他 Set shell = CreateObject(WScript.Shell) Set ex = shell .Exec(mshta.exeabout:) ChooseFile = Replace(ex.StdOut.ReadAll,vbCRLF,) Set ex = Nothing Set shell = Nothing End If End Function

解决方案

Set fso = CreateObject(Scripting.FileSystemObject) Dim oMD5 :Set oMD5 = CreateObject(System.Security.Cryptography.MD5CryptoServiceProvider) Dim oLog'As Scripting.TextStream Set oArgs = WScript.Arguments If oArgs.Count = 1然后 sFolderPath = GetFolderPath()设置oLog = fso.CreateTextFile(sFolderPath& \FileHash.csv,True) oLog.Writesep =& vbTab& vbCrLf CheckFolder oArgs(I) oLog.Close Msgbox完成! Else MsgboxDrop Folder End If Sub CheckFolder(sFolderPath) Dim sKey Dim oFolder'As Scripting.Folder 设置oFolder = fso.GetFolder(sFolderPath) 对于oFolder.Files中的每个oFile oLog.Write oFile.Path& vbTab& GetMd5(oFile.Path)& vbCrLf 下一个 对于每个oChildFolder在oFolder.SubFolders CheckFolder oChildFolder.Path 下一个 End Sub 函数GetFolderPath () Dim oFile'As Scripting.File Set oFile = fso.GetFile(WScript.ScriptFullName) GetFolderPath = oFile.ParentFolder End Function 函数GetMd5(文件名) Dim oXml,oElement oMD5.ComputeHash_2(GetBinaryFile(filename)) Set oXml = CreateObject(MSXML2.DOMDocument) Set oElement = oXml.CreateElement(tmp) oElement.DataType =bin.hex oElement.NodeTypedValue = oMD5.Hash GetMd5 = oElement.Text End Function $ b $函数GetBinaryFile(文件名) Dim oStream:Set oStream = CreateObject(ADODB.Stream) oStream.Type = 1'adTypeBinary oStream.Open oStream.LoadFromFile文件名 GetBinaryFile = oStream.Read oStream.Close 设置o Stream = Nothing End Function

I have managed to gather code and tried to generate the hash value of a file, but in the present code I need to drag the file on the VBScript, then it gives the hash value.

Can someone help me in re-writing the code where I can select the folder or a group of files and the hash values can be generated and written in the notepad file.

Attaching the code below.

Dim objFile,objFolder,objFSO Dim Arg, strText strText = "" Set objFSO = CreateObject("Scripting.FileSystemObject") If WScript.Arguments.Count > 0 Then For Each Arg in Wscript.Arguments Arg = Trim(Arg) If InStr(Arg,".") Then strText = strText & "Filename: " & Arg & vbNewLine If doMd5 Then strText = strText & "MD5 --> " & md5(Arg) & vbNewLine End If End If Next End If ' = 0 arguments means use double-clicked md5.vbs (or possible executed via the command line without filename arguments) Dim fName If WScript.Arguments.Count = 0 Then fName = ChooseFile(".") If fName <> "" Then strText = strText & "Filename: " & fName & vbNewLine If doMd5 Then strText = strText & "MD5 --> " & md5(fName) & vbNewLine End If Wscript.echo strText 'need this to keep things from going crazy when inserting data into notepad (ensures notepad is top window somehow) End If End If 'exit gracefully if the user canceled file selection in the open file dialog If strText = "" Then Dim strExit strExit = "No file selected, exiting gracefully..." & vbNewLine strExit = strExit + "Don't forget you can drag and drop files onto this script, too." & vbNewLine strExit = strExit + "Or use the 'Send To' right-context menu as detailed in the script." & vbNewLine MsgBox strExit, 0, "MD5.VBS" WScript.Quit End If Dim WshShell Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "notepad", 3 WScript.Sleep 500 WshShell.SendKeys strText Function md5(filename) Dim MSXML, EL, MD5Obj Set MD5Obj = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider") MD5Obj.ComputeHash_2(readBinaryFile(filename)) Set MSXML = CreateObject("MSXML2.DOMDocument") Set EL = MSXML.CreateElement("tmp") EL.DataType = "bin.hex" EL.NodeTypedValue = MD5Obj.Hash md5 = EL.Text End Function Function readBinaryFile(filename) Const adTypeBinary = 1 Dim objStream Set objStream = CreateObject("ADODB.Stream") objStream.Type = adTypeBinary objStream.Open If filename <> "" Then objStream.LoadFromFile filename 'slight modification here to prevent error msg if no file selected End If readBinaryFile = objStream.Read objStream.Close Set objStream = Nothing End Function Dim shell, defaultLocalDir, objWMIService, colItems, objItem, ex Set shell = CreateObject( "WScript.Shell" ) defaultLocalDir = shell.ExpandEnvironmentStrings("%USERPROFILE%") & "\Desktop" Set shell = Nothing Function ChooseFile(ByVal initialDir) Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem") Dim winVersion winVersion = CInt(Left(objItem.version, 1)) Next Set objWMIService = Nothing Set colItems = Nothing If (winVersion <= 5) Then Set cd = CreateObject("UserAccounts.CommonDialog") cd.InitialDir = initialDir cd.Filter = "ZIP files|*.zip|Text Documents|*.txt|Shell Scripts|*.*sh|All Files|*.*" cd.FilterIndex = 4 If cd.ShowOpen = True Then ChooseFile = cd.FileName Else ChooseFile = "" End If Set cd = Nothing Else Set shell = CreateObject( "WScript.Shell" ) Set ex = shell.Exec( "mshta.exe ""about: """ ) ChooseFile = Replace( ex.StdOut.ReadAll, vbCRLF, "" ) Set ex = Nothing Set shell = Nothing End If End Function

解决方案

Here we go:

Set fso = CreateObject("Scripting.FileSystemObject") Dim oMD5: Set oMD5 = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider") Dim oLog 'As Scripting.TextStream Set oArgs = WScript.Arguments If oArgs.Count = 1 Then sFolderPath = GetFolderPath() Set oLog = fso.CreateTextFile(sFolderPath & "\FileHash.csv", True) oLog.Write "sep=" & vbTab & vbCrLf CheckFolder oArgs(I) oLog.Close Msgbox "Done!" Else Msgbox "Drop Folder" End If Sub CheckFolder(sFolderPath) Dim sKey Dim oFolder 'As Scripting.Folder Set oFolder = fso.GetFolder(sFolderPath) For Each oFile In oFolder.Files oLog.Write oFile.Path & vbTab & GetMd5(oFile.Path) & vbCrLf Next For Each oChildFolder In oFolder.SubFolders CheckFolder oChildFolder.Path Next End Sub Function GetFolderPath() Dim oFile 'As Scripting.File Set oFile = fso.GetFile(WScript.ScriptFullName) GetFolderPath = oFile.ParentFolder End Function Function GetMd5(filename) Dim oXml, oElement oMD5.ComputeHash_2(GetBinaryFile(filename)) Set oXml = CreateObject("MSXML2.DOMDocument") Set oElement = oXml.CreateElement("tmp") oElement.DataType = "bin.hex" oElement.NodeTypedValue = oMD5.Hash GetMd5 = oElement.Text End Function 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

更多推荐

生成文件的哈希值

本文发布于:2023-11-12 14:18:17,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文件   哈希值

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!