public DataPackage Execute(string actionID, DataPackage paramTable) { //for paranoya mode //var request = new DataPackage(paramTable.ToArray()); if (paramTable == null) { paramTable = new DataPackage("Col1.Int.1.Null"); } paramTable.Headers["ActionID"] = actionID; paramTable.Headers["UserName"] = _options.UID; paramTable.Headers["SessionID"] = _loginInfo.SessionID.ToString(); //Использовать таймстамп в сообщении и проверять его на сервере paramTable.Headers["EncryptedKey"] = _clientAes .EncryptBin(_ticket .ToByteArray() .Concat(BitConverter.GetBytes((DateTime.Now - DateTime.Now.Date).TotalMilliseconds)).ToArray()) .ToBASE64String(); paramTable.UpdateHeaders(); var response = SendAndRecieve(paramTable); if (response.Headers.ContainsKey("Status") && (string)response.Headers["Status"] == "ERROR") { throw new TCPConnectorException(response); } return(response); }
private void Connecting(string userName, string password) { #if NETCOREAPP using (var clientRSA = RSA.Create()) #else using (var clientRSA = new RSACng()) #endif { var clientPK = clientRSA.Export(); using (DataPackage request = new DataPackage("UserName.String.32", "PublicKey.String.256")) { request.Headers.Add("ActionID", "Sys.LoginRequest"); request.Headers.Add("UserName", userName); request.UpdateHeaders(); request.AddNew(); request["UserName"] = userName; request["PublicKey"] = clientPK; request.Update(); using (var response = SendAndRecieve(request)) { if (response.Headers.ContainsKey("Status") && (string)response.Headers["Status"] == "ERROR") { throw new TCPConnectorException(response); } response.GoDataTop(); response.Read(); _loginInfo = new LoginInfo(); _loginInfo.Import(clientRSA.Decrypt(((string)response["LoginInfo"]).ToByteArray(), _padding)); _clientAes = Aes.Create() .ImportBin(_loginInfo.CryptoKey); } } using (var request = new DataPackage("UserName.String.32", "SessionID.String.34", "EncryptedKey.String.256")) { request.Headers.Add("ActionID", "Sys.Logon"); request.Headers.Add("UserName", userName); request.UpdateHeaders(); request.AddNew(); request["UserName"] = userName; request["SessionID"] = _loginInfo.SessionID.ToString(); request["EncryptedKey"] = _clientAes .EncryptBin(Encoding.UTF8.GetBytes(password)) .ToBASE64String(); request.Update(); using (var response = SendAndRecieve(request)) { if (response.Headers.ContainsKey("Status") && (string)response.Headers["Status"] == "ERROR") { throw new TCPConnectorException(response); } response.GoDataTop(); response.Read(); var token = (string)response["Ticket"]; _ticket = new Guid(_clientAes.DecryptBin(token.ToByteArray()).Take(16).ToArray()); //_ticket = new Guid(((BinaryDataBuffer)_clientAes.DecryptBin(token.ToByteArray())).Slice(0, 16)); //_userName = userName; Connected = true; } } } }