Показать сообщение отдельно
Старый 16.03.2015, 17:42   #3
Новичок
 
Аватар для noklin
 
Регистрация: 15.03.2015
Сообщений: 6
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
noklin пока неопределено
По умолчанию

Цитата:
Сообщение от ScythLab Посмотреть сообщение
Ты сам пишешь алгоритм blowfish?
Да. Точнее писал, пока не наткнулся на готовое решение в сорцах сборки l2jskyline.ru.
Так вот там, там есть метод:

private void decryptBlock(byte[] src, int srcIndex, byte[] dst, int dstIndex){

int xl = BytesTo32bits(src, srcIndex);
int xr = BytesTo32bits(src, srcIndex + 4);

xl ^= P[ROUNDS + 1];

for (int i = ROUNDS; i > 0; i -= 2){
xr ^= F(xl) ^ P[i];
xl ^= F(xr) ^ P[i - 1];
}

xr ^= P[0];

Bits32ToBytes(xr, dst, dstIndex);
Bits32ToBytes(xl, dst, dstIndex + 4);
}

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

Я ваще думаю что байты инвертировать надо в пакете.
Всем известный факт: 2 первых байта это размер пакета. Так? Да окей берем 2 байта BA00 читаем как в школе учили слева на право: 1011101000000000 а это у нас ваще -17920(в десятичной системе) Отсюда мысль про ивертирование. По моей гипотезе нужно брать по порядку значимые байты и их инвертировать. То есть зная что 2 байта есть размер пакета, мы берем и инвертируем это 2 байта получаем 00BA. Следующий байт 8С тип пакета его не трогаем. Следующие 4 байта ID сессии его тоже инвертируем и так далее. А потом применить мой BlowFish без первых 2х байт конечно же.

Копался в исходниках но нечего похожего на это не нашел.

Последний раз редактировалось noklin, 16.03.2015 в 17:55.
noklin вне форума   Ответить с цитированием