public static int ToInt32(byte[] bytes, int offset) {
int ret = 0;
for (int i=0; i<4 && i+offset<bytes.length; i++) {
ret <<= 8;
ret |= (int)bytes[i] & 0xFF;
}
return ret;
}
Вот результат:
Пакет который приходит изначально от сервера - 02-13 20:32:09.911: I/System.out(1637): BA004511EBAFFAAAEB7F8AD5BC3F38CA9FD86156CC6D1DCB26 D5E7A5E497D87BADA3256418297DAAA0F2CA8593B92856517D 40C9D6A7462C9DBB73788F19AC9922A276C97674674D431937 51512DC07D32013B92622D2291AA98EE1AB649ABFEDC711A56 BC64061EA4537BC5088B1663B7B6CF2578AC926282F4645202 924C5B406B64C73B2CD35F1C01EC8091601F37E1297B1D79AE A1B44FFC2FC470AF431E213EB23C72E16484C99DF9200FC7E0 5EC44E94F072BE45B7620D
Пакет в котором я отсёк размер пакета - 02-13 20:32:09.921: I/System.out(1637): 4511EBAFFAAAEB7F8AD5BC3F38CA9FD86156CC6D1DCB26D5E7 A5E497D87BADA3256418297DAAA0F2CA8593B92856517D40C9 D6A7462C9DBB73788F19AC9922A276C97674674D4319375151 2DC07D32013B92622D2291AA98EE1AB649ABFEDC711A56BC64 061EA4537BC5088B1663B7B6CF2578AC926282F4645202924C 5B406B64C73B2CD35F1C01EC8091601F37E1297B1D79AEA1B4 4FFC2FC470AF431E213EB23C72E16484C99DF9200FC7E05EC4 4E94F072BE45B7620D0000
Пакет который я декодил по начальному ключу блоуфиша (кстати проверьте плиз у себя, ключ интерлюдовский, у вас так же получилось?) - 02-13 20:32:09.921: I/System.out(1637): D1A89279E77E010F60C4CD4FB62DFF6E471CBFE205CD45E5C4 C5FCC40712DC03054E2BC11165240ED0099D850EAED6F9B608 2972CC03CE72CDF36AEB32863EFD42016649D94D4BC26166CC AFF5A2411B4F851BB55B8C0807AA0B5C6DCFECC34941B048D2 18C7C8BFCD74DC9DF0388D59B5619158A6B4E216525B8C2A11 55AE866F2173015A2D22F4C629DFB78981337B83C74D68C5EC 5C9BC776C317482901612311B720B660F27D758A2ABE584032 B17DAE52B3DF01CF72FA1D
А это пакет который декодил антиксором, который опубликован выше - 02-13 20:32:09.932: I/System.out(1637): D1A89279E77E00000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000052B3DF01CF72FA1D
Где косяк??? я уже себе все мозги сломал, дальше инита продвинутся не могу... обидно... на пхп по моему и то проще это реализовать...
To Kilatif:
Решил до конца пройтись по блоуфиш, нашел у тебя несколько различий, ты говарил что пишешь по другие пакеты вот решил уточнить.
Код:
public byte[] Decode(byte[] data)
{
int i, len;
byte[] DBuff = new byte[8];
len = data.Length; - тут в делфи - 2 (вернее мы вызываем декод передавая в длину - 2)
for (i = 0; i < len / 8; i ++)
{
Array.Copy(data, i * 8, DBuff, 0, 8);
DBuff = DecodeBlock(DBuff);
Array.Copy(DBuff, 0, data, i * 8, 8);
}
return data;
}
public byte[] Encode(byte[] data)
{
int i, len;
byte[] DBuff = new byte[8];
len = data.Length; - тут там тоже - 2
for (i = 0; i < len / 8; i++)
{
Array.Copy(data, i * 8, DBuff, 0, 8);
DBuff = EncodeBlock(DBuff);
Array.Copy(DBuff, 0, data, i * 8, 8);
}
return data;
}
Еще тут:
Код:
j = 0;
for (i = 0; i < 18; i++)
{
data = ((Key[j] & 0xFF) << 24) | ((Key[(j+1) % Size] & 0xFF) << 16) | ((Key[(j+2) % Size] & 0xFF) << 8) | (Key[(j+3) % Size] & 0xFF);
PArray[i] = PArray[i] ^ data;
j = (j + 4) % Size;
}
datal = 0;
datar = 0;
for (i = 0; i < 9; i++)
{
Blowfish_encipher(ref datal, ref datar);
PArray[i*2] = datal;
PArray[i*2 + 1] = datar;
}
for (i = 0; i < 4; i++)
for (j = 0; j < 128; j++)
{
Blowfish_encipher(ref datal, ref datar);
SBoxes[i, j*2] = datal;
SBoxes[i, j*2 + 1] = datar;
}
// тот же кусок на делфи
for i:=0 to 17 do begin
data:=((key[j] and $FF)shl 24)or((key[(j+1) mod Size] and $FF)shl 16)or((key[(j+2) mod Size] and $FF)shl 8)or(key[(j+3) mod Size] and $FF);
PArray[i] := PArray[i] xor data ;
j := (j + 4) mod Size ;
end;
datal := 0 ;
datar := 0 ;
for i:=0 to 8 do begin
Blowfish_encipher (datal, datar) ;
PArray[i*2] := datal ;
PArray[i*2 + 1] := datar ;
end;
for i:=0 to 3 do
for j:=0 to 127 do begin
Blowfish_encipher (datal, datar) ;
SBoxes[i,j*2] := datal ;
SBoxes[i,j*2 + 1] := datar ;
end;
Или в делфи нумерация как-то по другому? (всмысле массива)
Добавлено через 2 часа 24 минуты To Kilatif:
Можно эту функцию: procedure AddCheckSumm(var data: array of byte; len: integer);
Последний раз редактировалось Tin-moon, 14.02.2012 в 13:15.
Причина: Добавлено сообщение
Tin-moon, в делфи цикл, например for j := 0 to 127 подразумевает то, что j будет идти от нуля до 127 включительно, а когда j станет 128, то цикл прервется
А цикл for (j = 0; j < 128; j++) говорит о том, что j будет увеличиваться на единицу, начиная с нуля до тех пор пока j < 128. Т.е. когда j = 128, то цикл прервется. Поэтому это одно и тоже
Tin-moon, в делфи цикл, например for j := 0 to 127 подразумевает то, что j будет идти от нуля до 127 включительно, а когда j станет 128, то цикл прервется
А цикл for (j = 0; j < 128; j++) говорит о том, что j будет увеличиваться на единицу, начиная с нуля до тех пор пока j < 128. Т.е. когда j = 128, то цикл прервется. Поэтому это одно и тоже
Спасибо, понял. Функция уже не нужна(в прошлом посте);
Добавлено через 1 час 31 минуту
WARNING [14 Feb 13:51:10,121] net.l2emuproject.loginserver.network.L2LoginClient .decrypt(): Wrong checksum from client: [State: CONNECTED | IP: 127.0.0.1 ]
Вот вредина Все-таки нужна функция AddCheckSumm
Последний раз редактировалось Tin-moon, 14.02.2012 в 15:54.
Причина: Добавлено сообщение
unsigned long checksum( unsigned char *packet, int count ) { long chksum = 0L; for( int i = 0; i < count; i += 4 ) chksum ^= *((unsigned long *)&raw[i]); return chksum; };
To Kilatif:
Прикол, решил сравнить инициализацию блоуфиша:
Приходящий на 1 и тот же входящий пакет Init, получаются разные значения PArray.
Прикол в следующем:
Java и C# дают следующий результат (одинаковый):
Код:
* - PArray {long[18]} long[]
[0] -11504476527 long
[1] 818284978 long
[2] 5389473844 long
[3] 5277480315 long
[4] 2258027768 long
[5] 1971259599 long
[6] -10807336962 long
[7] 15922993650 long
[8] -1570502760 long
[9] -13871540854 long
[10] 7461419269 long
[11] 15931572012 long
[12] -4834315440 long
[13] 6949642799 long
[14] 13899931484 long
[15] 11387598665 long
[16] 14253408890 long
[17] 11324059052 long
а вот реализация на Delphi немного другой ( совпало только первые два):