/* 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 }