Показать сообщение отдельно
Старый 06.10.2009, 12:39   #18
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

ладно, попытаюсь описать 2 варианта "поверхностной" криптовки которые могут быть. дабы дать понять что реализщация прямо зависит от требований.


(кстати, помимо склейки есть еще разбивка, это когда в одном тцп пакете приходит несколько линейковских, к примеру куча нпцинфо при телепорте - наглядный пример этого)

сразу определюсь. чтобы не путаться
линеевский пакет - часть данных с длинной равной первым 2м байтам этих данных.
грубый пример (на который конечно же ругнеться компилятор)
record
size:dword;
data:array[0..size-2] of byte;
end;

и тцп пакет, просто поток данных содержащий n ное колво байтикоф, которые и составляют ряд линеевских пакетов.
в предекрипт попадает тцп пакет, в декриптгп - должен попадать линейковский.
т.е. в предекрипте поток данных надо приводить к линейковскому виду.. сам поток представляет из себя куски тех самых рекордов, криптованые поверхностно, возможно с обрезаным "хвостом" данных, возможно их будет несколько

2 варианта:
первый. в котором склейку либо разбивку тцп пакетов для получения линеевских пакетов учитывать не нужно будет:

под него подпадает случай когда траффик криптуеться/декриптуеться потоково, и нам не нужно отделять линейковские пакеты друг от друга
простейший пример - первый байт ксориться константой, все остальные байты потока ксоряться предыдущим полученым байтом.
т.е. на крипт/декрипт не влияет длинна линейковского пакета, о длинне вообще упоминания в алгоритме декриптовки нет. либо если и есть хоть какоето упоминание длинны - то это суммарная длинна прошедших тцп пакетов. которую мы можем просчитать без разбивания/склеивания кусков потока требуемых для получения линеевского пакета.

запутано ? - перечитай.

в таком случае ничего учитывать не прийдеться, все будет учтено в сокетном енджине в котором "склейка" и "разбивка" пакетов идет после вызова PreDecrypt

второй случай, более сложный.
в котором склейку/разбивку пакетов нужно будет учитывать.
это те "не совсем" потоковые алгоритмы в котором нужно получить целый линейковский пакет дабы его декриптовать, либо нужно знать длинну предыдущего линеевского пакета чтобы получить ключ для декриптовки следующего (линейковский ксоринг - наглядный пример, нам нужно знать длинну линейковского пакета чтобы получить ключ для обработки следующего пакета.
когда будешь определяться с тем нужно ли учитывать разбивку/склейку главное четко отделить в алгоритме твоей декриптовки что есть "навесок" на протокол, а что есть уже стандартный ксоринг, за который отвечает декриптгп, вдруг навесок все таки относиться к первому пункту)

в общем определись и скажи что у тебя.
если все таки второй вариант, попытаюсь накалякать примерчик, но поверь, он будет сильно отличаться от того что тебе будет нужно -))
а если первый вариант, то и заморачиваться не стоит.

зы. только сейчас заметил что не закомитил последний невксор.дпр на свн.. пардон.. исправил -)
__________________
L2Ext - project closed.

Последний раз редактировалось alexteam, 06.10.2009 в 19:52.
alexteam вне форума   Ответить с цитированием
За это сообщение alexteam нажился 2 спасибками от: