Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как расчитать MD5 - хеш самого себя (Приложения) [D7, XP]


Страницы:   1 2 3

Дима ©   (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]

ну и на кой ты его здесь привел?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо