Цитата:
Сообщение от Dolwin
А что за аргумент checkHash в методе public void OnAuthKeyData(byte[] exchangeKey, string checkHash, int serial)? Как он генерируется?
В роуте /Auth/KeyData я получают 2массива каких то.
По первому - я генерирую ключики:
Код:
handler.getKeyExchange().generateKey( AbstractKeyExchange.Mode.SERVER, exchangeKey );
String hash = handler.getKeyExchange().getAuthentication();
Дальше не до проверить хеш с checkHash
Но вот что за checkHash я так и не понял
От клиент приходит вторым массивом какой то ключ 32 байта
То это далеко не текст..
Помогите плиз)
|
checkhash идет от пакета CM_AUTH_KEYDATA
Свернуть ↑
public CM_AUTH_KEY_DATA()
{
this.ID = LoginPacketOpcode.CM_AUTH_KEY_DATA;
}
public override Packet<LoginPacketOpcode> New()
{
return new CM_AUTH_KEY_DATA();
}
public override void OnProcess(Session<LoginPacketOpcode> client)
{
XmlDocument xml = ReadLoginPacket();
XmlElement root;
XmlNodeList list;
byte[] keyData = null;
root = xml["Request"];
list = root.ChildNodes;
foreach (object j in list)
{
XmlElement i;
if (j.GetType() != typeof(XmlElement)) continue;
i = (XmlElement)j;
switch (i.Name.ToLower())
{
case "keydata":
keyData = Convert.FromBase64String(i.InnerText);
break;
}
}
xml = null;
System.IO.MemoryStream ms = new System.IO.MemoryStream(keyData);
System.IO.BinaryReader br = new System.IO.BinaryReader(ms);
byte[] exchangeKey = br.ReadBytes(br.ReadInt32());
byte[] hash = br.ReadBytes(br.ReadInt32());
string checkHash = Convert.ToBase64String(hash);
((LoginSession)client).OnAuthKeyData(exchangeKey, checkHash, Serial);
}
}Code: C++
Свернуть ↑Развернуть ↓
Ключ который приходит в 32 байтах считываем путем: byte[] hash = br.ReadBytes(br.ReadInt32());
И затем переводим в base64 string checkHash = Convert.ToBase64String(hash);
получая значение checkHash
Желательно в этой теме не обсуждать строительство эмулятора, лучше писать уже в существующих темах, чтобы данная тема была максимально чистой и понятной.