【发布时间】:2016-01-06 11:05:35
【问题描述】:
我尝试了来自 https://github.com/acmeism/RosettaCodeData/blob/master/Task/MD5/AutoHotkey/md5-1.ahk 的代码,确实适用于 Windows 7:
data := "abc"
MsgBox % MD5(data,StrLen(data)) ; 900150983cd24fb0d6963f7d28e17f72
MD5( ByRef V, L=0 ) {
VarSetCapacity( MD5_CTX,104,0 ), DllCall( "advapi32\MD5Init", Str,MD5_CTX )
DllCall( "advapi32\MD5Update", Str,MD5_CTX, Str,V, UInt,L ? L : VarSetCapacity(V) )
DllCall( "advapi32\MD5Final", Str,MD5_CTX )
Loop % StrLen( Hex:="123456789ABCDEF0" )
N := NumGet( MD5_CTX,87+A_Index,"Char"), MD5 .= SubStr(Hex,N>>4,1) . SubStr(Hex,N&15,1)
Return MD5
}
但是,现在某些 dll 调用必须不起作用,因为它确实不在 windows 10 中返回正确的值。例如,给定的代码 sn-p 返回 70350F6027BCE3713F6B76473084309B 而不是 @ 987654326@。我还尝试使用管理员权限运行它。不知道这背后的原因是什么。由于某种原因,我无法直接访问 advapi32 dll 中的 MD5 函数。
我应该怎么做才能获得正确的 MD5 哈希?
【问题讨论】:
-
我当前的解决方法:从fourmilab.ch/md5 和
Run %comspec% /C ""%A_WorkingDir%\md5.exe" -d"%MY_STRING%" > "%A_WorkingDir%\tmp.txt"", %A_WorkingDir%执行exe,然后读取tmp.txt的文件内容(嵌入循环并在之后进行文件删除) -
在 CryptCreateHash 文档中没有提到它在 Windows 10 上不可用。所以也许你应该这样做:msdn.microsoft.com/en-us/library/windows/desktop/… 是 .netFramework 的 MD5Init/MD5Update/MD5Final 部分还是 dos/did它默认带有Windows?我找不到它的文档。
-
如果所有这些都不起作用,可能值得尝试获取一个 javascript 库,将其放入脚本对象并在您的代码中使用它。我不确定它是否可以处理二进制数据......
-
我真的不知道。但我认为是标准的windows安装内容。
标签: md5 autohotkey