Ofstream, или как создать локальное подключение
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Здравствуйте, у меня возникал такой вопрос. Мне нравится пользоваться библиотекой «fstream», но я не мог сделать одну вещь. Куда бы вы не заходили: сайты, игры и тд, вам нужно было, либо зарегистрироваться, либо войти. Так вот, зарег. зашли, на сервер, то, куда-то появится ваши данные: логин, пароль, Ip. Если мы зайдем туда, где надо вводить данные, но если мы введем не правильно, то нам показывают ошибку. Так вот, переходим в c++
Как сделать с помощью fstream как бы сервер для входа. Те данные будут находится в блокноте, и по этим данным можно было зайти.
Например:
И в консоли:
Введите логин:
Admin
Введите пароль:
12345
Вы успешно зашли
Или
Введите логин:
Adm
Введите пароль:
112345
Данные неверные
Эскизно программа может выглядеть так:
Когда будешь тестировать программу, сначала «зарегистрируйся», а потом пытайся «войти». После «регистрации» посмотри в каталоге запуск файл server.txt.
Можно также зарегистрировать несколько пользователей (проверку на повтор регистрационных данных не делал).
В качестве бонуса, постарался продемонстрировать работу с классами и перегрузку операторов ввода/вывода в поток для класса.
Пароль не нужно хранить в открытом виде. Обычно используют необратимое хеширование при сохранении пароля на диск.
При проверке пароля, такому же хешированию подвергается введенный пользователем пароль. В случае совпадение с оригинальными хешем, вход считается успешным.
По той причине, что пользователей может быть много, лучше сначала найти нужную запись по логину, а потом уже проверять пароль.
Для шифрования пароля можно использовать bcrypt.
Больше половины не понял)
А для чего нужна библиотека cstdlib?
Вообще, для
system
нужен<cstdlib>
. В Visual Studio он (system
) по умолчанию в работает без подключения<cstdlib>
. Тем не менее, его стоит подключать явно.Если честно, то мне ясна суть физически, а вот уже если самому написать, то будут затруднения.
Nikitaz58, а что конкретно непонятно? Вроде никакой экзотики не использовал...
Например вот это
Класс
Account
предназначен для хранения и работы со «сладкой парочкой» логин-пароль. В приватных переменных класса хранятся строки логина (username) и пароля (password).Статический метод класса
check()
проверяет строку-кандидат на логин или пароль на допустимость. Сейчас проверяется, что строка не пустая и что в строке отсутствуют пробелы. Сюда можно дописать любые другие проверки, например, что строка не содержит кириллицу.Метод
validate()
— это просто проверка совпадения строк, переданных в качестве параметров, со строками логина-пароля, которые хранятся в экземпляре класса.Две «дружественные» функции
осуществляют вывод логина-пароля в поток и ввод из потока соответственно. Причём, поскольку для потоков в этих функциях используются менее специализированные классы
istream
иostream
, то эти функции могут использоваться и для консольного, и для файлового ввода-вывода, и для ввода-вывода в памяти (strstream
).Кстати, если принять во внимание замечание selevit'а по поводу шифрования и хранения регистрационной информации, то можно увидеть, что это всё можно реализовать не затрагивая интерфейса класса
Account
: надо изменить только реализацию методов класса. Следовательно вызывающий код останется без изменений. Это — одно из основных преимуществ ООП.