|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Отправка и получение ассемблерных кодов
Доброго времени суток, уважаемые формчане.
Есть у меня задачка логинится к серверу. Сервер не мой и логинирование на нём происходит следующим образом: Мы коннектимся, сервер присылает нам пакет, мы его читаем, формируем свой, в который запихиваем данные (логин - пароль) и отправляем обратно, ждём ответ. Получает пакет с кодом: успех, провал. Есть исходник того, как это реализуется на C#, а вот как подобное реализовать на delphi у меня, честно говоря, не хватило соображаловки, буду благодарен за совет. Описание класса на C# Код:
using System.Collections.Generic; using System.Net.Sockets; using System.Security.Cryptography; using System.Text; namespace PWCheckAccount { class PWAuth { string IP; int Port; public bool Result { get; private set; }// Результат авторизации(связка(логин+пароль) верна/не верна) public bool Connected { get; private set; }// Результат подключения к серверу(подключиться удалось/не удалось) public PWAuth(string ip) : this(ip, 29000) { } public PWAuth(string ip, int port) { IP = ip; Port = port; } public bool Check(string login, string pass) { Result = false; Connected = false; TcpClient tcp = new TcpClient(); try { tcp.Connect(IP, Port); } catch { return false; } Socket skt = tcp.Client; Connected = skt.Connected; while (skt.Connected) { byte[] buf = new byte[0xFF]; skt.Receive(buf); if (buf[0] == 0x01) { List<byte> Send = new List<byte>(); byte[] key = new byte[0x10]; for (int i = 0; i < 0x10; i++) key[i] = buf[i + 3]; byte[] loginbt = Encoding.GetEncoding(1251).GetBytes(login); byte[] hash = GetHash(key, login, pass); Send.Add((byte)loginbt.Length); Send.AddRange(loginbt); Send.Add((byte)hash.Length); Send.AddRange(hash); Send.Add(0x00); Send.Insert(0,(byte)Send.Count); Send.Insert(0, 0x03); skt.Send(Send.ToArray()); continue; } Result = buf[0] == 0x02; break; } skt.Close(); return Result; } private byte[] GetHash(byte[] key, string login, string pass) { byte[] logwithpass = Encoding.ASCII.GetBytes(login + pass); MD5 md5 = MD5.Create(); return new HMACMD5(md5.ComputeHash(logwithpass)).ComputeHash( key); } } } проблему , собственно составила работа с такими 0x03 значениями, т.к. не имею ни малейшего понятия как с ними работать в делфе. Пользуюсь XE2 clientsocket. Заранее благодарю! |
#2
|
||||
|
||||
Цитата:
В Delphi шестнадцатеричные числа записываются через знак доллара: $03 |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
VarvarNet (13.12.2012)
|
#3
|
|||
|
|||
Премного благодарен!
|
#4
|
||||
|
||||
Цитата:
Цитата:
sorry for offtop Пишу программы за еду. __________________ |
#5
|
|||
|
|||
Цитата:
Назвал так, потому как в статье, по которой разбирал всё это добро они были названы так. А так как я пока учусь, то не стал придумывать своих названий, думал, уж раз люди пишут, наверное знают о чём. |