1

Тема: AHK: Подсчет md5 хеш-суммы

Нужна консольная утилита или ahk функция считающая хеш файла. Важно что бы в выводе не было всякого мусора, вроде ссылок на сайт разраба и т. п. Нужно только полное имя файла и его хеш-сумма в одну строку. Смотрел функции под ahk на забугорном сайте, все найденные мной функции почему-то не работают, а у консолек дурацкая форма записи выводного файла. Help, люди.

2 (изменено: Alectric, 2016-09-26 20:46:54)

Re: AHK: Подсчет md5 хеш-суммы

Была где-то тема, не могу найти, но вот код которым пользуюсь:

#SingleInstance,Force
SetBatchLines,-1
SetWorkingDir,%A_ScriptDir%
onexit,exit

par:=%0%
if !par
{
  msgbox,Воспользуйтесь контекстным меню`nлюбого файла в проводнике "Hash MD5".
  SplitPath,A_ScriptFullPath,,,Ext
  if ext=ahk
    RegWrite,REG_SZ,HKCR,*\shell\Hash MD5\command,,"%a_ahkpath%" "%A_ScriptFullPath%" "`%1"
  else
    RegWrite,REG_SZ,HKCR,*\shell\Hash MD5\command,,%A_ScriptFullPath% "`%1"
  exitapp
}

RegRead,old_file,HKCR,*\shell\Hash MD5,tmp1
RegRead,old_MD5,HKCR,*\shell\Hash MD5,tmp2

param=%1%
if param=
  file:=A_ScriptFullPath
else
  file:=param

MD5:=FileMD5(file)
if (MD5=old_MD5)
  chek=Одинаковые файлы...
else
  chek=!!! Разные файлы !!!

MsgBox,Текущий файл`n%file%`n`n%MD5%`n%old_MD5%`n`n%old_file%`nПредыдущий файл`n`n`t%chek%
clipboard=%MD5%

RegWrite,REG_SZ,HKCR,*\shell\Hash MD5,tmp1,%file%
RegWrite,REG_SZ,HKCR,*\shell\Hash MD5,tmp2,%MD5%


FileMD5(sFile="", cSz=4) {  ; by SKAN www.autohotkey.com/community/viewtopic.php?t=64211
 cSz := (cSz<0||cSz>8) ? 2**22 : 2**(18+cSz), VarSetCapacity( Buffer,cSz,0 )
 hFil := DllCall( "CreateFile", Str,sFile,UInt,0x80000000, Int,3,Int,0,Int,3,Int,0,Int,0 )
 IfLess,hFil,1, Return,hFil
 hMod := DllCall( "LoadLibrary", Str,"advapi32.dll" )
 DllCall( "GetFileSizeEx", UInt,hFil, UInt,&Buffer ),    fSz := NumGet( Buffer,0,"Int64" )
 VarSetCapacity( MD5_CTX,104,0 ),    DllCall( "advapi32\MD5Init", UInt,&MD5_CTX )
 Loop % ( fSz//cSz + !!Mod( fSz,cSz ) )
   DllCall( "ReadFile", UInt,hFil, UInt,&Buffer, UInt,cSz, UIntP,bytesRead, UInt,0 )
 , DllCall( "advapi32\MD5Update", UInt,&MD5_CTX, UInt,&Buffer, UInt,bytesRead )
 DllCall( "advapi32\MD5Final", UInt,&MD5_CTX )
 DllCall( "CloseHandle", UInt,hFil )
 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, DllCall( "FreeLibrary", UInt,hMod )
}

exit:
param=%1%
if param=
  file:=A_ScriptFullPath
else
  file:=param
MD5:=FileMD5(file)
RegWrite,REG_SZ,HKCR,*\shell\Hash MD5,tmp1,%file%
RegWrite,REG_SZ,HKCR,*\shell\Hash MD5,tmp2,%MD5%

exitapp
Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

3

Re: AHK: Подсчет md5 хеш-суммы

Alectric Спасибо, чудно работает.

4 (изменено: freeZer0K, 2016-09-30 21:01:35)

Re: AHK: Подсчет md5 хеш-суммы

Отличная консольная версия:

https://idrassi.github.io/DirHash

Алгоритмы:
MD5, SHA1, SHA256, SHA384, SHA512

Выдает hash не только отдельных файлов, но и всего содержимого директории. Рекомендую.