Как обратиться к файлу, который размещён в интернете С++?
Доброго времени суток. Суть вопроса такова: мне нужно залить в сеть(желательно в закрытый доступ) файл, который будет содержать набор пользователей моей программы. При запуске программы на ПК будет происходить обращение к этому файлу для авторизации, после чего из этого файла будет доставаться персональная информация про пользователя. Подскажите, пожалуйста, какое хранилище может подойти для этой цели и хотя бы направление, в котором стоит искать средства реализации(на какую тему шерстить интернет).
Заранее спасибо
Зачем же в файл? Лучше бы в базу, обычную реляционную, и лучше бы это обернуть в какой-нибудь сервис для авторизации, который будет выдавать ключи/токены, разрешающие выполнять опредленные действия в программе. Вам для чего конкретно? Разграничивать доступ к платному функционалу?
Мне нужно для шифратора создавать персональный ключ, опираясь на данные пользователя. Этот ключ будет использоваться при расшифровке информации. Файл будет состоять из 3-х записей в строке: логин, пароль и ключ к шифру. И с каждой строки будет записываться новый пользователь, не думаю, что для этого стоит использовать БД
> Файл будет состоять из 3-х записей в строке: логин, пароль и ключ к шифру. И с каждой строки будет записываться новый пользователь
Удивительное дело, вы описали вещь которая по-простому называется таблицей в реляционной базе, но не думаете, что для этого стоит использовать БД. Если вы запишете это в файл, то вы будете имитировать базу данных, т.к. все равно будете построчно вычитывать. Ну да дело даже не в этом - если у вас в файле будет шифр - то вы ПО ОПРЕДЕЛЕНИЮ не можете давать доступ наружу для чтения всего файла - шифр должен отдаваться во внешний мир только если логин+пароль подошли. Вам нельзя проверять пароль непосредственно на клиенте, т.к. для этого вам придется дать возможность считать на клиент ВЕСЬ файл, что приведет к тому, что по сети будут гулять логины|пароли|шифры других пользователей. Поэтому вам по-любому нужен небольшой скрипт/программка на сервере, которая будет смотреть в инет, получать запросы на проверку логина, и отдавать шифр клиенту. И только эта программка будет иметь доступ к этому файлу(базе).
Что использовать это менее важный вопрос, хотя я все-таки советую вам взять тот же SQLite и записать все туда, будет в сто раз удобнее. Более конкретные технические решения можно будет посоветовать, если вы уточните, какими ресурсами располагаете и с какими языками знакомы.
Станислав Макаров: Я понял, что должен сделать. Мне это нужно сделать для диплома, поэтому какие либо денежные средства в это я вкладывать не планировал. Вы не можете мне подсказать ресурс, который бы представлял услуги сервера бесплатно, где я мог бы разместить файл БД и программу для проверки входных данных
Ivan98: Если это диплом, то нужно остановиться и подумать, стоит ли заморачиваться. Я отвечал вам с позиции продакшн-софта, т.е. для случая, когда можно потерять деньги/время/репутацию в случае неудачных архитектурных решений, а раз диплом, то вам надо сначала ответить на вопрос - будет ли это оцениваться, или это никого интересовать не будет. В принципе файл загрузить тоже нужно суметь, поэтому возможно проще все-таки как предложено выше. В любом случае, есть две подзадачи. Первая - написать скрипт на серверной стороне, который будет коннектиться к базе по запросу и выдавать ключ, если логин и пароль верные, или шиш, если неверные, и больше ничего. Это лучше сделать на каком-нибудь языке, для которого есть веб-фреймворки. В принципе задача достаточно простая, можно за парй дней разобраться, заодно опыт получите. Бесплатный вариант: https://www.heroku.com/beta-pricing , плана Free вам хватит с головой. Хероку поддерживает сейчас вот эти языки и платформы: https://www.heroku.com/features . Если вообще никак с этими языками, и нужен только С++, то чуть сложнее, нужно поискать фри-хостинг. Вторая подзадача: сделать запрос от клиента к серверу. Для работы по HTTP на плюсах (как клиента, так и сервера) могу порекомендовать cpp-netlib.org, ему нужен только Boost. Если уже пользуетесь чем-то, например Qt или POCO - в этих библиотеках есть свои средства, их должно хватить. Если клиентская часть у вас на Delphi - не смогу подсказать, хотя еще в далекой Delphi 7 вроде уже были компоненты для работы по сетевым протоколам.
Если уточните, на чем написана ваша программа (в которую должен отдаваться персональный ключ), и насколько реально для вас разобраться и набросать простейший сервис на незнакомом языке - можно сузить множество вариантов.
Ivan98: вот кстати неплохой туториал веб-приложения на рубях (используют Синатру) с деплоем на Хероку - вполне любопытный вариант для вас. У вас будет еще проще - вам нужен один единственный обработчик, который выдаст в JSON-ответе либо ключ, либо ошибку авторизации.
Зачем изобретать велосипед, если уже есть комплекты разработки защищенных программ? :) А там и ключи с таймерами, и шифрование, и прочая мякотка - хочешь, хоть кусок кода в зашифрованное пространство пиши, чтобы как черный ящик работал - ничего в память не копировал, внутри ключа выполнялся и результаты выдавал :)