Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
ничего не приходит после PROTOCOL_BASE_CONNECT_ACK
#11
Вообщем исправил я эту ошибку,но теперь новая клиент обрывает соединение когда я ему шлю пакет PROTOCOL_BASE_CONNECT_ACK.Есть идеи?
Ответ
#12
Перепроверять структуру, так как явно sessionId не может быть 0.
Ответ
#13
PROGRAMMATOR Написал:Перепроверять структуру, так как явно sessionId не может быть 0.
Проверил структуру вроде всё ок,но всё равно клиент вылетает
вот пакет:
[SRC="csharp"]
SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pair.Public);
byte[] serializedPublicBytes = publicKeyInfo.ToAsn1Object().GetDerEncoded();
string publicKey = Convert.ToBase64String(serializedPublicBytes);
Logger.Instance.Info("Key length = " + Encoding.ASCII.GetBytes(publicKey).Length);
using (var stream = new MemoryStream())
using (var writer = new BinaryWriter(stream))
{
writer.Write(new byte[] { 0x96, 0x00 });
writer.Write(new byte[] { 0x02, 0x02 });
writer.Write(new byte[] { 0x00, 0x00 });
writer.Write(new byte[] { 0x01, 0x00, 0x00, 0x00 }); // session id
writer.Write(new byte[] { 0x00, 0x00 });
writer.Write(new byte[] { 0x02, 0x0b, 0x00, 0x09, 0x00}); // client version
writer.Write(new byte[] { 0x85, 0x00 }); // key length
writer.Write(Encoding.ASCII.GetBytes(publicKey));
writer.Write(new byte[]{ 0xfc, 0xb0, 0x01, 0x00, 0x01, 0x01, 0x01, });
return stream.ToArray();
}
[/SRC]
а вот метод генерации ключей:
[SRC="csharp"]
public static AsymmetricCipherKeyPair GeneratePair()
{
CryptoApiRandomGenerator randomGenerator = new CryptoApiRandomGenerator();
SecureRandom secureRandom = new SecureRandom(randomGenerator);
RsaKeyPairGenerator rsa = new RsaKeyPairGenerator();
rsa.Init(new KeyGenerationParameters(secureRandom, 512));
AsymmetricCipherKeyPair pair = rsa.GenerateKeyPair();
return pair;
}
[/SRC]

В чём может быть проблема?

Добавлено через 22 минуты
Изменил на этот код и клиент не закрывается,но ответного пакета не шлёт(
[SRC="csharp"]
writer.Write(new byte[] { 0x98, 0x00 });
writer.Write(new byte[] { 0x02, 0x02 });
writer.Write(new byte[] { 0x00, 0x00 });
writer.Write(new byte[] { 0x01, 0x00, 0x00, 0x00 }); // session id
writer.Write(new byte[] { 0x00, 0x00 });
writer.Write(new byte[] { 0x02, 0x0b, 0x00, 0x09, 0x00}); // client version
writer.Write(new byte[] { 0x85, 0x00 });
writer.Write(Encoding.ASCII.GetBytes(publicKey));
writer.Write(new byte[]{ 0xda, 0xfc, 0x01, 0x00, 0x11, 0x01, 0x01, });
[/SRC]
Ответ
#14
Проблема в ключе, я же писал, что он только тело передает, да и еще изменённое, просто сгенерировать и отдать клиенту - ничего не даст.

Dom2;405348 Написал:writer.Write(new byte[] { 0x02, 0x0b, 0x00, 0x09, 0x00}); // client version - это версия сервера
writer.Write(new byte[] { 0x85, 0x00 }); // 133 = 2 (размер ключа без экспоненты 80 00) + 128 (ключ) + 3 (01 00 11)
writer.Write(Encoding.ASCII.GetBytes(publicKey)); // даже представить не могу что там, это прям в base64 туда залит?
writer.Write(new byte[]{ 0xda, 0xfc, 0x01, 0x00, 0x11, 0x01, 0x01, }); // DA FC - вообще часть ключа, 01 00 11 - public экспонента
Ответ
#15
PROGRAMMATOR Написал:Проблема в ключе, я же писал, что он только тело передает, да и еще изменённое, просто сгенерировать и отдать клиенту - ничего не даст.

Как именно изменено?И как всё это реализовать?я в rsa вообще нуб:redlol:

Если что пилю я под GAME VER : 2.12.18.151123010
Ответ
#16
Понятия не имею как изменяет, я же писал об этом. Нужно пробовать цеплять S2MO_32bit.dll и смотреть, как генерит и как считывает.

Юзаю 2.12.19.160112004
Ответ
#17
PROGRAMMATOR Написал:Понятия не имею как изменяет, я же писал об этом. Нужно пробовать цеплять S2MO_32bit.dll и смотреть, как генерит и как считывает.

Юзаю 2.12.19.160112004

В моей версии клиента вроде тело ключа не изменяется,но всё равно почему то клиент обрывает соединение и закрывается...
Ответ
#18
Вроде? Smile Генерируете же 512 бит вместо 1024.
Ответ
#19
PROGRAMMATOR Написал:Вроде? Smile Генерируете же 512 бит вместо 1024.

1024 битный ключ должен же быть равен 128 байтам верно?так вот у меня он равен 216 байтам почему то.бред короче.
Ответ
#20
Это в base64, без нее 162 байта, отступить 29 байт инфы о ключе, выбрать 128 байт ключа, пропустить 2 байта с размерами public экспоненты и в конце сама экспонента.

Получается 128 ключик и три байта экспонента, так что всё верно. Другое дело все это скормить клиенту.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  После перезахода сервер отказываеться видить клиент slawa560 6 2,155 08-08-2017, 11:26 PM
Последний пост: slawa560
  После покупки предмета 0 часов slawa560 1 1,470 08-06-2017, 12:15 AM
Последний пост: PROGRAMMATOR
  PROTOCOL_BASE_CONNECT_ACK Boris2105 1 1,708 05-17-2016, 03:29 PM
Последний пост: PROGRAMMATOR
  PROTOCOL_BASE_CONNECT_ACK Sojang 12 3,184 01-21-2016, 12:15 PM
Последний пост: PROGRAMMATOR

Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)