![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Мои наработки...
CheckSum - считает контрольную сумму строки/файла по моему собственному алгоритму. Очень простая в работе dll. Бета-версия, обо всех лагах сообщать! Считает суммы как для односимвольной строки, так и для файлов (проверял аж на 4Гб-файле, подвис на 15сек, но сработал! По-моему, даже CRC-32 не так быстро работает...) Кстати, подходит (по-моему) и для "криптования" строк, т.к. обратную процедуру составить невозможно. Пока-что всё... По мере хода наработок буду добавлять. Последний раз редактировалось PhoeniX, 06.05.2011 в 07:14. |
|
#2
|
|||
|
|||
|
Вы бы описание "своего собственного" алгоритма подсчета выложили. Было бы больше коментариев.
|
|
#3
|
||||
|
||||
|
Кстати, если у кого есть замечания/предложения по улучшению кода - прошу, буду только рад.
|
|
#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; |
|
#5
|
||||
|
||||
|
Да ты хоть почитай что такое хэш функция!! Быстрее.. Фуф.. Может быть, хоть я тебе гарантирую что фиг она быстрее будет(смотри на той же вики табличную реализация). Да и в семейство контрольных сумм crc побольше смысла заложено (опять же - читай вики). Для этой 'хэш функции' я буквально на ходу сча составлю тесты с одинаковым результатом выполнения.
а про скорость: сильно быстрые хэши - тоже не есть хорошо, так как перебор то тоже быстрее работать будет. итак мораль. Для начинающего, не знакомого с теорией..ну..неплохо. Хотя бы есть задумка, но назвать хэшем её у меня язык не поворачивается. Так что вот так вот. |
|
#6
|
||||
|
||||
|
совпадения - я сверял по своему генератору (занимался както перебором паролей). их КРАЙНЕ мало. Для того же мд5 их больше. Я сверял время у функций MD5, CRC32, и моей. итог (на достаточно быстром компе): MD5 - 127ms, CRC32 - 89ms, моя - 37ms. Согласен, для хешей может скорость и лишняя, но вот контрольные суммы файлов считать очень даже хорошо. Для моего проекта (Russia Online) будет очень даже нужной (при создании автоапдейтера, надо как можно быстрее считать суммы и сверять с полученным файлом). Для хешей паролей скорее будет SHAfromMD5 или ещё что-то комбинированное...
|
|
#7
|
||||
|
||||
|
ну вопросы скорости и прочего пока оставлю. не потому что согласился с тобой, а просто это бессмысленно. лучше я потом результаты теста покажу.
ну да ладно. вот ещё что не оч хорошо это передача входных как string. причём одной переменной весь массив входных данных. Но эт мелочи) |
|
#8
|
||||
|
||||
|
Я вообщет думал про линейное или побайтовое чтение файлов, или передачу данных как PChar, но не знаю как лучше оформить... Можешь подсказать))
|
|
#9
|
||||
|
||||
|
обычно делают несколько функций: Init, Update, Final. Можешь посмотреть как это деалют другие, но смысл в том что в хэш функцию передаются блоки данных (фактически массив байт) фиксированного размера и она их обрабатывает с учётом ранее принятых. В твоём случае нужна будет глобальная переменная и цикл вне функции (а на вызове её).
Можно и переделать, но посуди сам: нужно ли это? хэш строк и так брать нормально. |
|
#10
|
||||
|
||||
|
Проблема в том, что функцию я изначально писал для получения хешей файлов, некоторые из них до 5Гб.
|
|
#11
|
||||
|
||||
|
Для тех, кто пишет приложение без форм, но с необходимостью использования "Application.ProcessMessages", этот юнит будет полезен.
Я туда выдернул из модуля Forms всё необходимое. Разница ощутима: прога стала из тяжеловеса 407Кб маааленькой утилиткой в 183Кб. ЗЫ: Полностью рабочая в случае с консолью, на WinAPI не проверял. ЗЗЫ: FTerminate можно юзать как проверку завершения приложения. В случае ненадобности можете удалить. Последний раз редактировалось PhoeniX, 06.05.2011 в 07:14. |