You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.9 KiB
93 lines
2.9 KiB
/*
|
|
HASH types:
|
|
1 - MD2
|
|
2 - MD5
|
|
3 - SHA
|
|
4 - SHA256 - not supported on XP,2000
|
|
5 - SHA384 - not supported on XP,2000
|
|
6 - SHA512 - not supported on XP,2000
|
|
*/
|
|
HashFile(filePath,hashType=2) ; By Deo, http://www.autohotkey.com/forum/viewtopic.php?t=71133
|
|
{
|
|
PROV_RSA_AES := 24
|
|
CRYPT_VERIFYCONTEXT := 0xF0000000
|
|
BUFF_SIZE := 1024 * 1024 ; 1 MB
|
|
HP_HASHVAL := 0x0002
|
|
HP_HASHSIZE := 0x0004
|
|
|
|
HASH_ALG := (hashType = 1 OR hashType = "MD2") ? (CALG_MD2 := 32769) : HASH_ALG
|
|
HASH_ALG := (hashType = 2 OR hashType = "MD5") ? (CALG_MD5 := 32771) : HASH_ALG
|
|
HASH_ALG := (hashType = 3 OR hashType = "SHA") ? (CALG_SHA := 32772) : HASH_ALG
|
|
HASH_ALG := (hashType = 4 OR hashType = "SHA256") ? (CALG_SHA_256 := 32780) : HASH_ALG ;Vista+ only
|
|
HASH_ALG := (hashType = 5 OR hashType = "SHA384") ? (CALG_SHA_384 := 32781) : HASH_ALG ;Vista+ only
|
|
HASH_ALG := (hashType = 6 OR hashType = "SHA512") ? (CALG_SHA_512 := 32782) : HASH_ALG ;Vista+ only
|
|
|
|
f := FileOpen(filePath,"r","CP0")
|
|
if !IsObject(f)
|
|
return 0
|
|
if !hModule := DllCall( "GetModuleHandleW", "str", "Advapi32.dll", "Ptr" )
|
|
hModule := DllCall( "LoadLibraryW", "str", "Advapi32.dll", "Ptr" )
|
|
if !dllCall("Advapi32\CryptAcquireContextW"
|
|
,"Ptr*",hCryptProv
|
|
,"Uint",0
|
|
,"Uint",0
|
|
,"Uint",PROV_RSA_AES
|
|
,"UInt",CRYPT_VERIFYCONTEXT )
|
|
Gosub,HashTypeFreeHandles
|
|
|
|
if !dllCall("Advapi32\CryptCreateHash"
|
|
,"Ptr",hCryptProv
|
|
,"Uint",HASH_ALG
|
|
,"Uint",0
|
|
,"Uint",0
|
|
,"Ptr*",hHash )
|
|
Gosub, HashTypeFreeHandles
|
|
|
|
VarSetCapacity(read_buf,BUFF_SIZE,0)
|
|
|
|
hCryptHashData := DllCall("GetProcAddress", "Ptr", hModule, "AStr", "CryptHashData", "Ptr")
|
|
While (cbCount := f.RawRead(read_buf, BUFF_SIZE))
|
|
{
|
|
if (cbCount = 0)
|
|
break
|
|
|
|
if !dllCall(hCryptHashData
|
|
,"Ptr",hHash
|
|
,"Ptr",&read_buf
|
|
,"Uint",cbCount
|
|
,"Uint",0 )
|
|
Gosub, HashTypeFreeHandles
|
|
}
|
|
|
|
if !dllCall("Advapi32\CryptGetHashParam"
|
|
,"Ptr",hHash
|
|
,"Uint",HP_HASHSIZE
|
|
,"Uint*",HashLen
|
|
,"Uint*",HashLenSize := 4
|
|
,"UInt",0 )
|
|
Gosub, HashTypeFreeHandles
|
|
|
|
VarSetCapacity(pbHash,HashLen,0)
|
|
if !dllCall("Advapi32\CryptGetHashParam"
|
|
,"Ptr",hHash
|
|
,"Uint",HP_HASHVAL
|
|
,"Ptr",&pbHash
|
|
,"Uint*",HashLen
|
|
,"UInt",0 )
|
|
Gosub, HashTypeFreeHandles
|
|
|
|
SetFormat,integer,Hex
|
|
loop,%HashLen%
|
|
{
|
|
num := numget(pbHash,A_index-1,"UChar")
|
|
hashval .= substr((num >> 4),0) . substr((num & 0xf),0)
|
|
}
|
|
SetFormat,integer,D
|
|
|
|
HashTypeFreeHandles:
|
|
f.Close()
|
|
DllCall("FreeLibrary", "Ptr", hModule)
|
|
dllCall("Advapi32\CryptDestroyHash","Ptr",hHash)
|
|
dllCall("Advapi32\CryptReleaseContext","Ptr",hCryptProv,"UInt",0)
|
|
return hashval
|
|
} |