Что нового

Подсчет контрольной суммы файла

blacksergo

Новичок
Сообщения
20
Репутация
1
Здравствуйте. Я новичок и прошу помощи по проблеме: Как с помощью скрипта AutoIt подсчитать контрольную сумму файла. Проблема стоит несколько шире: Надо подсчитать контрольную сумму необходимого файла и если совпадает запустить, иначе окно с сообщением.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
blacksergo
hash.au3

Еще интересный способ определения MD-5 (и др. сумм) я узнал от Garrett`а. Тестировал только на ХР.
Код:
$MyFile = @ScriptDir & "\test.exe" ;программа для запуска
$MD5 = "244F92ABF6469168216853C336EADA49" ;эталонный MD-5
$HashedData = ObjCreate("CAPICOM.HashedData.1")
$HashedData.Algorithm() = 3 ; MD5
$hFile = FileOpen($MyFile, 16)
$binary = FileRead($hFile)
FileClose($hFile)
$HashedData.Hash($binary)
If $HashedData.Value <> $MD5 Then
	MsgBox(0, "", "Контрольная сумма MD-5 файла не равна эталону.", 5)
	Exit
Else
	Run($MyFile)
EndIf
 

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
madmasles
Ссылка на hash.au3 битая (404), в поисковике нашёл с ним не работает, вылетает ошибка 4-ой строки, где бы файл взять?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
AZJIO
http://autoit.rv.ua/files/Encoding Encryption/hash.au3
 

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Kaster
Как он должен увидеть файл? Копировал hash.au3 внутрь скрипта, клал его рядом, клал в Include, обзывал в _CRC32ForFile, вылетает ошибка строки 4 -
$HashedData^ ERROR
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
AZJIO
не понимаю о чем ты. кладешь hash.au3 в папку include, и используешь функции оттуда.
а если ты про скрипт предоставленный madmasles, то это другой метод, и к hash.au3 Отношения не имеет.
 

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Kaster
Так у меня скрипт не работает, и я стал сомневаться, тот ли это метод, пытаясь заставить его работать.
Вот что мне требовалось:
Код:
#include <hash.au3>
$MyFile = @ScriptDir & "\file.zip"
$sMD5 = _MD5ForFile($MyFile)
MsgBox(0, "", $sMD5)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
AZJIO
Похоже, работа функции зависит от размера файла. У меня Вашим кодом за ~20 секунд и с загрузкой памяти на 90-95% функция показала MD-5 файла размером 593 Мб, а 1,36 Гб - пустой MsgBox.

Вот так у меня показывает MD-5 больших файлов:
Код:
$HashedData = ObjCreate("CAPICOM.HashedData.1")
$HashedData.Algorithm() = 3 ; MD5
$file = FileOpen(@ScriptDir & "\file.zip", 16)

While 1
	$Buf = FileRead($file, 1024 * 1024)
	If @error = -1 Then ExitLoop
	$HashedData.Hash($Buf)
	Sleep(1)
WEnd
FileClose($file)
MsgBox(0, "Hash-MD5", $HashedData.Value)
PS
Тестировал только на ХР. А у Вас какая система?
 

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
madmasles
У меня XP-SP3 с обновами SP4. До вычисления дело не доходит, ошибка сразу, в той же строке, теперь она числится второй.
Зависимость от размера понятная, файл с харда читается 20 секунд, тут я не удивляюсь. Но вообще то я для быстроты маленькие файлы тестирую.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
AZJIO
У меня маленькие файлы с использованием hash.au3 на ура все функции отрабатывают.
 

Guezt

Продвинутый
Сообщения
335
Репутация
82
AZJIO
подтверждаю SP3+ Update выдает ошибку:
Код:
$HashedData.Algorithm() = 3
$HashedData^ ERROR

C hash.au3 вообще присваивает нулевое значение, попытался через подключение и вставлял функцию напрямую в скрипт из UDF. Разобраться пока не смог в чем причина. ОS Win XP Pro SP3+ AutoIT 3.3.4.0
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
AZJIO
Guezt
У меня Windows XP SP3 с последними обновлениями, AutoIt: 3.3.2.0 и с hash.au3, и приведенным мной кодом все отрабатывает.
Интересно, а у автора темы blacksergo работает.
 

ZanMax

Тестер
Сообщения
120
Репутация
5
Всем привет.
А будет ли работать на самом файле ? нужно узнать МД5 самого себя и если он не совпадает с заданым в самой программе тогда выйти.
Можно ли данные методы использовать ?


P.S. Извините не проверял нету АУТОИТ под рукой.
Спасибо.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
ZanMax
У меня работает, т.е. сам свою сумму считает.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
AZJIO
Guezt
Проверьте, пожалуйста, есть ли у Вас C:\WINDOWS\system32\capicom.dll? Если есть и способ определения хеш-сумм, который я узнал от Garrett не работает, тогда не знаю в чем дело.

Вроде разобрался.
Для того, чтобы работал этот способ надо установить Свободно распространяемый набор средств разработки Platform SDK CAPICOM и обновление к нему Security Update for CAPICOM (KB931906).

Или, если весь пакет не нужен, отдельно capicom.dll
 
Автор
B

blacksergo

Новичок
Сообщения
20
Репутация
1
Я воспользовался вот таким кодом:

Код:
#include "md5.au3"
Dim $FileMD5
$MyFile = @WindowsDir & "\winhlp32.exe" ;программа для запуска
$MD5 = "0xFA0BB5615AFAC938B293CB445B050195" ;эталонный MD-5
$FileMD5 = _MD5($MyFile)
MsgBox(0,"MD5 Results", "File = " & $MyFile & @CRLF & "File MD5 = " & $FileMD5)
If $FileMD5 <> $MD5 Then
    MsgBox(0, "", "Контрольная сумма MD-5 файла не равна эталону.", 5)
    Exit
Else
    Run($MyFile)
EndIf
 
Верх