|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Мои персональные исходники
Мои наработки...
CheckSum - считает контрольную сумму строки/файла по моему собственному алгоритму. Очень простая в работе dll. Бета-версия, обо всех лагах сообщать! Считает суммы как для односимвольной строки, так и для файлов (проверял аж на 4Гб-файле, подвис на 15сек, но сработал! По-моему, даже CRC-32 не так быстро работает...) Кстати, подходит (по-моему) и для "криптования" строк, т.к. обратную процедуру составить невозможно. Пока-что всё... По мере хода наработок буду добавлять. Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj Последний раз редактировалось PhoeniX, 06.05.2011 в 07:14. |
#2
|
|||
|
|||
Вы бы описание "своего собственного" алгоритма подсчета выложили. Было бы больше коментариев.
|
#3
|
||||
|
||||
Кстати, если у кого есть замечания/предложения по улучшению кода - прошу, буду только рад.
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#4
|
||||
|
||||
Описание алгоритма... проще функцию привести, она сама за себя всё скажет:
Код:
function SumFromStr(str:string):string; const arr:string='0123456789abcdef'; var sum:string; i,j,p,c:integer; begin sum:='00000000000000000000000000000000'; for i:=1 to length(str) do begin for j:=0 to ord(str[i]) do begin p:=(i*j mod 32)+1; c:=pos(sum[p],arr)+1; if c>=16 then c:=1; sum[p]:=arr[c]; end; end; Result:=sum; end; Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#5
|
||||
|
||||
Да ты хоть почитай что такое хэш функция!! Быстрее.. Фуф.. Может быть, хоть я тебе гарантирую что фиг она быстрее будет(смотри на той же вики табличную реализация). Да и в семейство контрольных сумм crc побольше смысла заложено (опять же - читай вики). Для этой 'хэш функции' я буквально на ходу сча составлю тесты с одинаковым результатом выполнения.
а про скорость: сильно быстрые хэши - тоже не есть хорошо, так как перебор то тоже быстрее работать будет. итак мораль. Для начинающего, не знакомого с теорией..ну..неплохо. Хотя бы есть задумка, но назвать хэшем её у меня язык не поворачивается. Так что вот так вот. Нет повести печальнее на свете, чем повесть о заклиневшем Resete. |
#6
|
||||
|
||||
совпадения - я сверял по своему генератору (занимался както перебором паролей). их КРАЙНЕ мало. Для того же мд5 их больше. Я сверял время у функций MD5, CRC32, и моей. итог (на достаточно быстром компе): MD5 - 127ms, CRC32 - 89ms, моя - 37ms. Согласен, для хешей может скорость и лишняя, но вот контрольные суммы файлов считать очень даже хорошо. Для моего проекта (Russia Online) будет очень даже нужной (при создании автоапдейтера, надо как можно быстрее считать суммы и сверять с полученным файлом). Для хешей паролей скорее будет SHAfromMD5 или ещё что-то комбинированное...
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#7
|
||||
|
||||
ну вопросы скорости и прочего пока оставлю. не потому что согласился с тобой, а просто это бессмысленно. лучше я потом результаты теста покажу.
ну да ладно. вот ещё что не оч хорошо это передача входных как string. причём одной переменной весь массив входных данных. Но эт мелочи) Нет повести печальнее на свете, чем повесть о заклиневшем Resete. |
#8
|
||||
|
||||
Я вообщет думал про линейное или побайтовое чтение файлов, или передачу данных как PChar, но не знаю как лучше оформить... Можешь подсказать))
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#9
|
||||
|
||||
обычно делают несколько функций: Init, Update, Final. Можешь посмотреть как это деалют другие, но смысл в том что в хэш функцию передаются блоки данных (фактически массив байт) фиксированного размера и она их обрабатывает с учётом ранее принятых. В твоём случае нужна будет глобальная переменная и цикл вне функции (а на вызове её).
Можно и переделать, но посуди сам: нужно ли это? хэш строк и так брать нормально. Нет повести печальнее на свете, чем повесть о заклиневшем Resete. |
#10
|
||||
|
||||
Проблема в том, что функцию я изначально писал для получения хешей файлов, некоторые из них до 5Гб.
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#11
|
||||
|
||||
ProcessMessages
Для тех, кто пишет приложение без форм, но с необходимостью использования "Application.ProcessMessages", этот юнит будет полезен.
Я туда выдернул из модуля Forms всё необходимое. Разница ощутима: прога стала из тяжеловеса 407Кб маааленькой утилиткой в 183Кб. ЗЫ: Полностью рабочая в случае с консолью, на WinAPI не проверял. ЗЗЫ: FTerminate можно юзать как проверку завершения приложения. В случае ненадобности можете удалить. Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj Последний раз редактировалось PhoeniX, 06.05.2011 в 07:14. |