private void ShareFile(Message message) { var fields = message.StringMessage.Split('$'); if (fields.Length < 5) { SendResult(false, "Параметры неверны"); } var userIdTo = fields[0]; var fileId = fields[1]; var fileName = fields[2]; var fileKey = fields[3]; var comment = fields[4]; var sendFilePath = CreatePrivateFileName(fileName); SHA1 hash = SHA1.Create(); var fileKeyHash = ByteToStringConverter(hash.ComputeHash(StringToByteConverter(fileKey))); var filePath = _dbController.GetPrivateFilePath(fileId, fileKeyHash); if (filePath == null) { SendResult(false, "Неверный ключ"); return; } if (!File.Exists(filePath)) { SendResult(false, "Файл не найден в файловой системе. Ошибка сервера"); Console.WriteLine("Файл не найден в файловой системе: " + filePath); return; } try { File.Copy(filePath, sendFilePath); } catch (Exception) { SendResult(false, "Не удалось отправть файл"); return; } var rsaPublicFile = _dbController.GetPublicKeyPath(userIdTo); if (String.IsNullOrEmpty(rsaPublicFile) || !_dbController.GetUserShareState(userIdTo)) { SendResult(false, "Пользователь не имеет открытого ключа или запретил получение файлов"); try { File.Delete(sendFilePath); } catch (Exception) { // } return; } var newFileKey = GenerateNewFileKey(10); CryptoController crypto = new CryptoController(); crypto.ChangeEncryptKey(sendFilePath, fileKey, newFileKey); newFileKey = ByteToStringConverter(crypto.EncryptDataWithRsaFile(rsaPublicFile, StringToByteConverter(newFileKey))); _dbController.ShareFile(sendFilePath, fileName, userIdTo, newFileKey, comment); SendResult(true); }