![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как расчитать MD5 - хеш самого себя (Приложения) [D7, XP]
Дима © (2008-07-22 20:44:00)Привет Уважаемые!
Есть консольное приложение, в нем использую функцию по расчету MD5:
function md5(s: string): string;
...
Использую так:
var
FileName: String;
...
Constr
Fnam: 'MyApp.exe';
...
FileName := Md5(ChangeFileExt(ExtractFileName(Fnam), ''));
Но это же расчет MD5 Имени файла а не самого приложения!
Как мне реализовать сей Сабж?
С Уважением Дима.
Dennis I. Komarov (2008-07-23 10:16:00) [21]> Почему md5 от файла - бред? Или что?
угу
Anatoly Podgoretsky (2008-07-23 10:15:00) [22]> Dennis I. Komarov (23.07.2008 10:07:29) [29]
А потому что лишнее, для проверки целостности, более чем достаточно быстро работающей процедуры расчета CRC32 вместо этого монстра.
User (2008-07-23 10:15:00) [23]http://delphiworld.narod.ru/base/md5.html, - функция вычисления хеш-суммы ..., в том числе:
functionMD5File(const FileName: string): TMD5Digest;
Ega23 (2008-07-23 10:12:00) [24]
> А собствено почему это?
Почему md5 от файла - бред? Или что?
Dennis I. Komarov (2008-07-23 10:07:00) [25]> [28] Ega23 © (23.07.08 09:51)
А собствено почему это?
Ega23 (2008-07-23 09:51:00) [26]Автор, ты уверен, что тебе именно хэш нужен, а не контрольная сумма?
Первое от файла - это бред. А вот второе - уже совсем даже и не бред...
Dennis I. Komarov (2008-07-23 09:38:00) [27]> [24] Дима (23.07.08 09:04)
Я скажу как вычислить md5 хешь файла, но сперва скажите где Вы его собрались хранить?
Anatoly Podgoretsky (2008-07-23 09:25:00) [28]> Palladin (23.07.2008 9:13:25) [25]
Такие функции по определению должны быть потоковыми.
Palladin (2008-07-23 09:13:00) [29]Понятия не имею в чем он нашел красоту загрузки всего файла в память...
Дима (2008-07-23 09:04:00) [30]
> Palladin © (23.07.08 08:45) [23]
Да теперь и не нужно уже :)
> Более красивый способ - грузить файл в TMemoryStream с помощью
> функции LoadFromFile
По совету
> Loginov Dmitry ©
Что то опять накосячил с реализацией, или как?
Palladin (2008-07-23 08:45:00) [31]а зачем тебе его в память загонять?
Дима (2008-07-23 08:38:00) [32]Соорудил так:
var
InFile: TFileStream;
//InMemory: TMemoryStream;
s: String;
const
FileName = 'Md5GetExe.exe';
begin
try
begin
InFile := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
//InMemory := TMemoryStream.Create.LoadFromFile(FileName);
s := (MD5DigestToStr(MD5Stream(InFile)));
WriteLn(s);
end;
Расчитывает верно! Но в память загнать не хватило опыта!
Дима (2008-07-23 05:07:00) [33]
> Loginov Dmitry © (22.07.08 23:49) [20]
Спасибо, сегодня попробую в коде! Разжеванно доходчиво! Респект!
Loginov Dmitry (2008-07-22 23:49:00) [34]> Assign(Fi, FileName);
> Reset(Fi, 1);
> GetMem(pBuf, BufSize);
> ...
>
> Так?
Не совсем. Так ты попытаешься открыть файл с монопольным доступом. Не выйдет, т.к. файл уже открыт.
Используй глобальную переменную FileMode (измени ее наfmOpenRead or fmShareDenyNone).
Более красивый способ - грузить файл в TMemoryStream с помощью функции LoadFromFile, после чего копировать содержимое стрима в строку в помощью SetString(), TMemoryStream.Read() или Move(), а уж после - твое md5.
Anatoly Podgoretsky (2008-07-22 23:34:00) [35]> Дима (22.07.2008 23:17:18) [18]
Так изменение только прототипа недостаточно, нужны изменения и в процедурах.
Дима (2008-07-22 23:17:00) [36]
> Anatoly Podgoretsky © (22.07.08 22:27) [15]
Не чего не получилось, лезут ошибки!
Эхх...
@!!ex (2008-07-22 22:35:00) [37]> [16] turbouser © (22.07.08 22:29)
Не смешно... Грустно. :(
turbouser (2008-07-22 22:29:00) [38]Орех :)
Anatoly Podgoretsky (2008-07-22 22:27:00) [39]> Дима (22.07.2008 22:20:11) [11]
Сделай так
function md5(var buf; Lenght: Integer): string;
или
function md5(var buf: TIP; Lenght: Integer): string;
Palladin (2008-07-22 22:26:00) [40]ну и на кой ты его здесь привел?