Текущий архив: 2009.08.09;
Скачать: CL | DM;
Вниз
Алгоритмы хеширования Найти похожие ветки
← →
{RASkov} © (2009-06-08 22:15) [0]Сбственно никак не найду алгоритм MD4 на делфи.
Но вопрос вот в чем. Нужна любая хеш функция, хоть на скорую руку придуманная.
Особого от нее ничего не нужно, главное скорость работы(нужно быстро).
Хеш нужен от строк ShortString. Всякие навороченные MD5, и иже с ними, думаю не рационально.
А вот свой алгоритм придумать - слабо :(
Из всех стандартных самый быстрый вроде MD4, но вот никак не могу найти его реализацию на делфи.
Или подскажите простой алгоритм хэширования коротких строк.
← →
Игорь Шевченко © (2009-06-08 22:17) [1]взять любую готовую реализацию MD5 и не мучиться.
на скорую руку - CRC16
← →
Медвежонок Пятачок © (2009-06-08 22:21) [2]на скорую руку - криптоапи и md5, sha, sha1, etc
CryptAcquireContext
CryptCreateHash
CryptHashData
CryptDestroyHash
← →
Медвежонок Пятачок © (2009-06-08 22:36) [3]в том числе ms base csp содержит реализацию мд2,мд4
← →
{RASkov} © (2009-06-08 22:39) [4]> [1] Игорь Шевченко © (08.06.09 22:17)
> взять любую готовую реализацию MD5 и не мучиться
Это есть... Есть и некоторые другие из перечисленных выше, а вот MD4 нет.
Ну раз нет, то и фик с ними.... буду МД5 тогда использовать...
Собственно нужно генерить названия секций для ИНИ файла
нечто так:
[хеш от DIR ниже]
DIR=C:\Windows\Font
File1=name1.ttf
File2=name2.ttf
File3=name3.ttf
...и т.д.
← →
Медвежонок Пятачок © (2009-06-08 22:42) [5]да все там есть. надо просто ездить на готовом велосипеде, а не искать такой же, но с перламутровыми пуговицами
← →
{RASkov} © (2009-06-08 22:44) [6]> [2] Медвежонок Пятачок © (08.06.09 22:21)
слишком это как-то сложно для нужного мне результата :)
Спасибо, конечно, за помощь, но думаю не стоит влазить в такие дебри, а использовать имеющийся у меня модуль MD5.pas. При его uses все это(нужное мне) достигается одной строчкой)
← →
{RASkov} © (2009-06-08 22:45) [7]> [5] Медвежонок Пятачок © (08.06.09 22:42)
Стандартное виндовое API? Если да, то сложно это для моих целей)
← →
Медвежонок Пятачок © (2009-06-08 22:47) [8]ну не знаю. я лично не вижу причин для линковки лишних килобайт этого паса с кучей таблиц перестановок.
← →
Медвежонок Пятачок © (2009-06-08 22:49) [9]чего сложно? написать за пять минут прототипы четырех простых апи-функций?
вас художников не поймешь ....
← →
{RASkov} © (2009-06-08 22:53) [10]> [8] Медвежонок Пятачок © (08.06.09 22:47)
тоже верно..... но я уже весь вечер убил на поиски быстрого алгоритма хеширования строк на делфи. В итоге вышел на MD4 и еще кучу времени убил на его поиски... Уже и голова толком от этого не соображает. Поэтому у меня есть три варианта:
1 - написать с использованием МД5
2 - лечь спать а потом 1 либо написать с использованием МД5, 2 либо потратить еще кучу времени на поиски использования этого АПИ
3 - (маловероятный) получить тут какую-то инфу по использованию второго варианта, второй его части :)
← →
antonn © (2009-06-08 22:54) [11]
> ну не знаю. я лично не вижу причин для линковки лишних килобайт
> этого паса с кучей таблиц перестановок.
самодостаточность.
← →
{RASkov} © (2009-06-08 22:56) [12]> [9] Медвежонок Пятачок © (08.06.09 22:49)
> написать за пять минут прототипы четырех простых апи-функций
Хм... все-то у вас, у музыкантов, так быстро и просто получается :) Куда нам до вас)
← →
Медвежонок Пятачок © (2009-06-08 22:59) [13]ну а если завтра мд5 перестанет нравится?
искать паскалевскую реализацию мд2?
самодостаточность.
Какая самодостаточность?
любое делфи и не делфи приложение и так уже зависит от кучи виндовых библиотек.
может и для гетюзернейм найти паскалевскую реализацию для самодостаточности?
← →
antonn © (2009-06-08 23:01) [14]
> любое делфи и не делфи приложение и так уже зависит от кучи
> виндовых библиотек.
ну давайте еще больше сделаем, чу уж там.
больше звеньев - ниже надежность
← →
{RASkov} © (2009-06-08 23:02) [15]> [13] Медвежонок Пятачок © (08.06.09 22:59)
> ну а если завтра мд5 перестанет нравится?
Почему завтра? Мне оно уже сегодня не нравится, а куда деваться? :)
← →
Медвежонок Пятачок © (2009-06-08 23:06) [16]куда деваться?
всего лишь заменить идентификатор требуемого алгоритма с CALG_MD5 на CALG_MD4 или любой другой по вкусу.
больше звеньев - ниже надежность
вам сама виндус то не жмет?
столько лишних звеньев там, ужос.
← →
antonn © (2009-06-08 23:09) [17]
> вам сама виндус то не жмет?
в самый раз.
какие там лишние звенья?
← →
Медвежонок Пятачок © (2009-06-08 23:11) [18]а вообще мужики не парьтесь, используйте что используете.
то что по итогу именно так и будет, я знал еще не открыв ветку, только название прочитав.
этот вопрос раз в год или чуть чаще стабильно проскакивает на форуме.
и обсуждение каждый раз примерно такое как сейчас.
:)
← →
Медвежонок Пятачок © (2009-06-08 23:12) [19]какие там лишние звенья?
ну там гди32.длл, кернел там всякий с юзер32.длл вкупе
стока хламу, жуть.....
← →
Медвежонок Пятачок © (2009-06-08 23:14) [20]а виндоус.пас надо вообще стирать сразу после установки делфи.
ибо не по пацански это - вверять свою судьбу в руки лишних звеньев
← →
antonn © (2009-06-08 23:14) [21]
> стока хламу, жуть.....
и что, если их удалить система и программы в ней будут работать?
← →
Медвежонок Пятачок © (2009-06-08 23:15) [22]удали свой виндоус пас
← →
Медвежонок Пятачок © (2009-06-08 23:16) [23]или попробуй удали адвапи.длл и запусти виду без лишнего звена
← →
antonn © (2009-06-08 23:19) [24]
> Медвежонок Пятачок © (08.06.09 23:16) [23]
>
> или попробуй удали адвапи.длл и запусти виду без лишнего
> звена
Хочу заметить, что в посте [16] было упомянуто о куче ненужных компонентов, на просьбу перечислить их были названы некоторые, как оказалось если их удалить то система перестанет работать. На мой взгляд тут где то логика хромает, на обе ноги.
пободаемся дальше? :)
← →
Медвежонок Пятачок © (2009-06-08 23:23) [25]где логика хромает?
у меня не хромает. хромает у тебя как раз.
удали windows.pas и программируй "самодостаточные" приложения.
но не хочешь же
← →
antonn © (2009-06-08 23:24) [26]еще раз перечитываем [16], вопрос был к фразе в нем.
Слив, понятно дело, ну да ладно, не буду заставлять это признавать прилюдно :)
← →
Медвежонок Пятачок © (2009-06-08 23:25) [27]ну удали advapi.dll как лишнее звено и запусти винду.
потом ответ напиши из пропатченной винды
← →
Медвежонок Пятачок © (2009-06-08 23:27) [28]Слив, понятно дело, ну да ладно
тебе и в самом деле так кажется?
← →
antonn © (2009-06-08 23:27) [29]
> ну удали advapi.dll как лишнее звено и запусти винду.
> потом ответ напиши из пропатченной винды
не "как", а речь шла о лишних звеньях. А не о том, чтобы удалить нужные.
Более того, под словами "больше звеньев" ниразу не подразумевается "ненужные".
← →
Медвежонок Пятачок © (2009-06-08 23:29) [30]ты меня убеди что твой мд5.пас это не лишнее звено, а позарез нужная для самодостаточности штука
← →
{RASkov} © (2009-06-08 23:34) [31]Вот тут нашел много инфы
http://www.interface.ru/home.asp?artId=5143
тут и MD2 и MD4 и еще куча всего и есть вроде как описания к
> CryptAcquireContext
> CryptCreateHash
> CryptHashData
> CryptDestroyHash
← →
Игорь Шевченко © (2009-06-08 23:37) [32]не секрет, что в винде есть много лишних (на текущий момент и в конкретной конфигурации) файлов, без которых она будет превосходно работать. Беда только в том, что они практически у всех разные.
Как пример - это DLL тех служб, которые по каким-то причинам оставновлены навсегда с момента ввода п^Bсистемы в эксплуатацию.
← →
DVM © (2009-06-09 00:31) [33]
> {RASkov}
А че бы CRC16...64 не использовать? Алгоритм проще уж некуда.
← →
@!!ex © (2009-06-09 00:53) [34]str[i]:=chr(ord(str[i])+(str[length-i+1])+length);
← →
{RASkov} © (2009-06-09 01:17) [35]> [33] DVM © (09.06.09 00:31)
Вот на CRC32 и остановился...)
Всем спасибо)
Особенно
> [34] @!!ex © (09.06.09 00:53)
у меня окончательно крышу снесло :))) все.... спать)
← →
DVM © (2009-06-09 01:22) [36]
> {RASkov} © (09.06.09 01:17) [35]
>
> > [33] DVM © (09.06.09 00:31)
>
> Вот на CRC32 и остановился...)
CRC32 их как собак нерезаных разных, вот у меня тут модулек есть, собрал разные, информацию о каких найти сумел:
http://dvmuratov.narod.ru/crc.pas
← →
@!!ex © (2009-06-09 01:22) [37]> [35] {RASkov} © (09.06.09 01:17)
Вообще какая цель то приследуется?
Почему ХЭШ?
Уникальность нужна? Хэш этого не гарантирует. Проверка строки на совпадени, зачем это в ini блоке??
← →
antonn © (2009-06-09 01:27) [38]
> Проверка строки на совпадени, зачем это в ini блоке??
типа guid"а %)
← →
{RASkov} © (2009-06-09 01:28) [39]> [36] DVM © (09.06.09 01:22)
Спасибо
← →
@!!ex © (2009-06-09 01:32) [40]> [38] antonn © (09.06.09 01:27)
ну так хэш не гарантирует уникальность...
← →
antonn © (2009-06-09 01:33) [41]гуид в общем то тоже, но используется :)
← →
@!!ex © (2009-06-09 01:35) [42]> [41] antonn © (09.06.09 01:33)
почему гуид то не гарантирует? :)
← →
antonn © (2009-06-09 01:38) [43]потому что "кол-во информации" в нем конечно, 2^128 вариантов :)
← →
{RASkov} © (2009-06-09 01:39) [44]> [37] @!!ex © (09.06.09 01:22)
> Вообще какая цель то приследуется?
есть пути, например:
C:\Dir1\Dir2\Dir3\Dir4
C:\Dir1\Dir4\
нужно в файле типа ини сделать запись секцию с папкой и перечисленные файлы из указанной папки без вложенных подпапок...
Должно получится нечто:
[хеш от DIR ниже]
DIR=C:\Windows\Font
File1=name1.ttf
File2=name2.ttf
File3=name3.ttf
...и т.д.
так же нужно потом создать в отдельном каталоге их(файлов) копии. Должно получится нечто:
RootDir
|-папка с файлами каталога C:\Dir1\Dir2\Dir3\Dir4 вот имя ей нужно придумать уникальное
|-папка с файлами каталога C:\Dir1\Dir4 тоже самое
например просто Dir4 не подойдет. т.е.
RootDir
|-Dir4
|-Dir4
не уникально.
В тоже время путать файлы нельзя.
А вот нечто так:
[00AF76F3]
DIR=C:\Dir1\Dir2\Dir3\Dir4
File1=name1.ext
File2=name2.ext
File3=name3.ext
...и т.д.
RootDir
|-00AF76F3
|-примерно тоже самое (другой хеш)
думаю самое то.
Нужно иметь возможность восстановить файлы на место потом. Т.е. забрал - вернул где взял
Сорри.... если сумбурно объяснил, голова уже не варит :(
← →
@!!ex © (2009-06-09 01:47) [45]> [44] {RASkov} © (09.06.09 01:39)
Я понял. Рискуешь получить проблемы. хэш никак не гарантирует уникальность.
← →
antonn © (2009-06-09 01:51) [46]
> @!!ex © (09.06.09 01:47) [45]
больше хеш - меньше вероятность :)
← →
vuk © (2009-06-09 02:18) [47]Если нужно не сильно навороченное хеширование, то вот. Тупо и быстро.
function CalcHash( Data : pointer; DataSize : integer ) : integer;
register;
asm
push ebx
push esi
push edi
mov esi, Data
xor ebx, ebx { ebx will be hash }
or esi, esi { Data is nil? }
jz @@Exit
mov edx, DataSize {edx = length}
or edx,edx {length zero?}
jz @@Exit
xor ecx,ecx {ecx is shift counter}
@@Cycle:
xor eax,eax
mov al,[esi] {eax = data byte }
inc esi
rol eax,cl {rotate character}
xor ebx,eax {xor with hash}
inc ecx {increment shift counter (rol uses only bottom 5 bits)}
dec edx
jnz @@Cycle
@@Exit:
mov eax,ebx
pop edi
pop esi
pop ebx
end;
function StrCalcHash( const S : string ) : integer;
begin
Result := CalcHash( pointer( S ), length( S ));
end;
← →
TIF © (2009-06-09 04:00) [48]
> Сбственно никак не найду алгоритм MD4 на делфи.
1) Delphi Encryption Compendium
Version 5.2
Есть шифрование, есть и хеши:THash_MD2 - MD2
THash_MD4 - MD4
THash_MD5 - MD5
THash_SHA - SHA
THash_SHA1 - SHA 1
THash_SHA256 - SHA 256 bit
THash_SHA384 - SHA 384 bit
THash_SHA512 - SHA 512 bit
THash_Sapphire - Sapphire
THash_Panama - Panama
THash_Tiger - Tiger
THash_RipeMD128 - RIPE MD 128 bit
THash_RipeMD160 - RIPE MD 160 bit
THash_RipeMD256 - RIPE MD 256 bit
THash_RipeMD320 - RIPE MD 320 bit
THash_Haval128 - Haval 128 Bit
THash_Haval160 - Haval 160 Bit (3 Rounds)
THash_Haval192 - Haval 192 Bit (4 Rounds)
THash_Haval224 - Haval 224 Bit (4 Rounds)
THash_Haval256 - Haval 256 Bit (5 Rounds)
THash_Whirlpool - Whirlpool
THash_Whirlpool1 - Whirlpool 1
THash_Square - Square
THash_Snefru128 - Snefru 128 Bit
THash_Snefru256 - Snefru 256 Bit
2) DCPcrypt Cryptographic Component Library v2
Аналогичная мощная библиотека, внутри хешей и функций шифрования не меньше
3) Что недавно видел из "скоростного"
На http://delphikingdom.com две статьи
Параллельное вычисление CRC32
http://delphikingdom.com/asp/viewitem.asp?catalogid=1399
Параллельное вычисление CRC64
http://delphikingdom.com/asp/viewitem.asp?catalogid=1401
← →
test © (2009-06-09 08:27) [49]http://www.google.ru/codesearch?as_q=md4&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%BA%D0%BE%D0%B4%D0%B0&hl=ru&as_lang=pascal&as_license_restrict=i&as_license=&as_package=&as_filenam e=&as_case=
Ну и мои 5 копеек ))
← →
TUser © (2009-06-09 09:31) [50]На скорую руку - это вообще xor.
← →
Ega23 © (2009-06-09 10:08) [51]
> почему гуид то не гарантирует? :)
В феврале прошлого года обсуждали.
← →
{RASkov} © (2009-06-09 10:17) [52]Спасибо всем.
Я вот тут с утра подумал, что проще сделать вот так:
[DIR4]
DIR=C:\Dir1\Dir2\Dir3\Dir4
File1=name1.ext
File2=name2.ext
File3=name3.ext
...и т.д.
[DIR4_1]
DIR=C:\Dir1\Dir4\
File1=name1.ext
File2=name2.ext
File3=name3.ext
...и т.д.
ну и коталог строить по такому же принципу:
RootDir
|-Dir4
|-Dir4_1
Т.е. вместо хэша использовать счетчик....:) И то, этот считчик только нужен при одинаковых именах конечных папок(которые в DIR=)...
Dir:=ExtractFileName(OldDir);
while DirectoryExist(NewDir+Format("%s_%d", [Dir, N]) do INC(N);
в таком плане вообщем...)
Страницы: 1 2 вся ветка
Текущий архив: 2009.08.09;
Скачать: CL | DM;
Память: 0.61 MB
Время: 0.015 c