Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/48: Рейтинг темы: голосов - 48, средняя оценка - 4.69
 Аватар для Kyra90
232 / 153 / 85
Регистрация: 06.10.2020
Сообщений: 468

Хранить строку в приложении

14.01.2022, 12:58. Показов 11041. Ответов 209
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Помогите, пожалуйста с курсовой.
Значит задача: Создать приложение с пользовательским доступом (логин/пароль, пользователь может быть пользователем, может быть админом). Значит я делаю следующим образом: В программу уже вшит пользователь "Администратор", при первом запуске предлагается создать ему пароль. Как только пароль создан рядом с приложением создается папка "Users" (по ее наличию, собственно, и проверяется первый запуск), где в файлах в зашифрованном виде хранится информация о пользователе.

Препод говорит, что это не совсем правильное решение, и файла с данными "Администратор" в папке с пользователями быть не должно, так как (цитирую дословно) "Я скопирую пользователей в другое место, прибью папку Users, запущу программу и получу доступ к Администратору, снова введя пароль, потом верну пользователей назад"

Можно ли как то хранить строковую переменную внутри приложения? Или может еще где-то. Или может какой-то другой метод хранения данных о пользователях есть? Буду очень благодарна за советы. Спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.01.2022, 12:58
Ответы с готовыми решениями:

Как и в каком виде хранить файлы в приложении
Добрый вечер! Помогите, пожалуйста, со след. заданием.:( Требуется в имеющуюся формочку добавлять материал (то есть загружать файл с...

Как можно хранить файлы, загружаемые пользователем в приложении?
Есть приложение C# .NET 5.0, связанное с MS SQL. Пользователь должен загружать файлы (изображения) прямо в приложении и они должны...

Как правильно хранить и использовать константы в WPF приложении
Сабж в теме. Использую такой способ: имеется статический класс (вернее несколько, отдельно для числовых, строковых и прочих констант) в...

209
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
17.01.2022, 05:59
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Kyra90 Посмотреть сообщение
Это да, а если папку удалили совсем? При удалении папки мне нужна полностью рабочая учетка "Администратора"
Можно увидеть оригинальное задание? Я не совсем понимаю, как при сносе БД, должен остаться старый админ, а главное зачем.

Цитата Сообщение от Kyra90 Посмотреть сообщение
Это абсолютно разные вещи Вам не кажется?)))
Я вижу это так:
- есть приложение, предоставляющее работу с пользователями
- при первом запуске инициализируется БД, и выводит диалоговое окно настройки администратора. Это типичный сценарий для всяких CMS.
- все данный храняться в папке "Data" (можно и Users, название не принципиально)
- при удалении этой папки считается что пользователь затер ВСЕ и хочет начать сначала (создать админа и т.д.)
1
HF
 Аватар для HF
1342 / 926 / 202
Регистрация: 09.09.2011
Сообщений: 2,753
Записей в блоге: 2
17.01.2022, 10:08
Цитата Сообщение от wizard41 Посмотреть сообщение
При удалении папки предлагается создать нового Администратора. Этот "новый" администратор все равно не сможет прочесть другие файлы, если их вернуть на место, потому что его хеш пароля не подойдет к "тому хешу".
А где или как вы связь старого хэша и нового установили?
Про наличие ХХ администраторов с ХХ хэшами вопрос пока отложу.

Добавлено через 6 минут
Цитата Сообщение от Kyra90 Посмотреть сообщение
Идея понятна, но она не отвечает задаче. Если уже создан пароль для Администратора, то учетка должна оставаться рабочей, даже если папку Users удалили.
Меня больше вот этот вопрос интересен. У преподавателя видимо есть требование, но он не может дать нужную информацию, так как считает что выдаст вариант правильной (на его взгляд) реализации.
Цитата Сообщение от Wolfdp Посмотреть сообщение
- при удалении этой папки считается что пользователь затер ВСЕ и хочет начать сначала (создать админа и т.д.)
Вот-вот. При таком условии вообще все варианты заходят в тупик, так как возникает ещё больше вопросов.
Это должен быть абсолютно внешний и защищённый ресурс, в котором нельзя ничего изменить и удалить через просто "взять и стереть". Тогда мы даже удалив, имеем состояние "админ уже зарегистрирован".
Но и если вы вдруг решили Действительно переустановить программу на компьютере, или вторую версию установить. Опа... нереально в силу того что мы "защитили первого администратора".

Замкнутый круг. Пока это не будет решено, бессмыслено придумывать что-то. Преподаватель всегда может ответить "а если я теперь сделаю...". Даже локальная БД не поможет. Он же тоже может там стереть строку?

Добавлено через 7 минут
Kyra90, я бы предложил такой вариант. По-видимому предподаватель хочет от вас увидеть решения. Возможно больше одного. Но явно возник закономерный вопрос - как далеко можно зайти в поисках, так как почти все решения не имеют гарантии от чтения, изменения.
Я бы предложил собрать все предложенные варианты и уточнить у препода. Какой он утвердит, тот и сделать.
0
 Аватар для Kyra90
232 / 153 / 85
Регистрация: 06.10.2020
Сообщений: 468
17.01.2022, 10:25  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Можно увидеть оригинальное задание?
Оригинальное задание довольно большое, и касается всего проекта. Сейчас это не актуально. Задание для формы управления пользователями:

1. Первый запуск приложения должен определяться
2. При первом запуске приложения уже должен существовать пользователь "Администратор", которому при первом запуске должен быть назначен пароль
3. "Администратор" имеет право создавать пользователей, пользователь с правами администратора имеет право создавать пользователей, пользователь без прав администратора не имеет право создавать пользователей
4. "Администратор" имеет право менять пароль любому пользователю, пользователь с правами администратора имеет право менять пароль любому пользователю, кроме пользователя "Администратор", пользователь без прав администратора имеет право менять пароль только себе
5. "Администратор" имеет право дать или забрать права администратора любому пользователю, кроме себя, пользователь с правами администратора имеет право дать или забрать права администратора любому пользователю кроме пользователя "Администратор", пользователь без прав администратора не имеет доступа к функции распределения прав администратора

Цитата Сообщение от Wolfdp Посмотреть сообщение
при удалении этой папки считается что пользователь затер ВСЕ и хочет начать сначала (создать админа и т.д.)
Если этот подход считается нормальным, то тогда нужно как-то обойти ситуацию, на которую мне явно указал преподаватель:
Цитата Сообщение от Kyra90 Посмотреть сообщение
"Я скопирую пользователей в другое место, прибью папку Users, запущу программу и получу доступ к Администратору, снова введя пароль, потом верну пользователей назад"

ТО есть другими словами: Есть программа, в которой введены какие-то пользователи. Приходит какой-нибудь Вася за комп, копирует папку "Users" в другое место, из папки программы ее прибивает и запускает прогу. Программа предлагает ему создать Администратора (так как не находит папку "Users"), он (Вася) ее создает, а потом перемещает из скопированной папки пользователей обратно в папку программы (всех, кроме Администратора). Таким образом Вася, по факту, меняет пароль Администратора. Правильно? Вот по этому и возник вопрос. Сейчас, после Вашего ответа вижу 2 способа решения: 1. То, что спрашивала вначале, как сделать так, чтоб пользователь Администратор не зависел от папки Users. и 2-й, чтоб обойти вышеуказанную проблему, может есть возможность сделать так, чтоб скопированные пользователи, при возвращении обратно в папку программы, были недоступны к использованию?

Добавлено через 12 минут
Цитата Сообщение от HF Посмотреть сообщение
А где или как вы связь старого хэша и нового установили?
Вот и я не поняла

Цитата Сообщение от HF Посмотреть сообщение
У преподавателя видимо есть требование, но он не может дать нужную информацию, так как считает что выдаст вариант правильной (на его взгляд) реализации.
Возможно... Свою таинственность он прикрыл тем, что хочет посмотреть как я реализую это на свое усмотрение.

Цитата Сообщение от HF Посмотреть сообщение
Опа... нереально в силу того что мы "защитили первого администратора".
Изначально у меня была идея хранить пароль внутри программы. Я слышала или читала, что есть возможность хранить переменную внутри приложения (именно переменную). тогда после переустановки программы новая будет с пустой переменной, и ее можно заполнить или изменить, или я что-то путаю?

Цитата Сообщение от HF Посмотреть сообщение
Какой он утвердит, тот и сделать.
Я тоже так думала, но получила ответ "Сама думай"

Добавлено через 3 минуты
HF, Просто по логике все верно. Изменить пароль Администратора должен иметь возможность только сам Администратор из программы, либо очистить программу полностью (удалив, например Users) запустив ее как только установленную
0
HF
 Аватар для HF
1342 / 926 / 202
Регистрация: 09.09.2011
Сообщений: 2,753
Записей в блоге: 2
17.01.2022, 10:55
Цитата Сообщение от Kyra90 Посмотреть сообщение
Изначально у меня была идея хранить пароль внутри программы.
По этим словам нужно менять бинарный код текущего исполняемого файла. Это мало того что не просто, то ещё и задача явно не для ученика.
0
 Аватар для Kyra90
232 / 153 / 85
Регистрация: 06.10.2020
Сообщений: 468
17.01.2022, 11:18  [ТС]
Цитата Сообщение от HF Посмотреть сообщение
По этим словам нужно менять бинарный код текущего исполняемого файла.
Вот... я нашла... на сколько это адекватное решение??

C#
1
2
3
4
5
6
7
8
9
10
            Console.WriteLine("введите команду ");
            string x =  Console.ReadLine();
             if (x == "clear"|| Properties.Settings.Default.AdminPass =="")
            {
                    Console.WriteLine("Введите пароль Администратора ");
                    Properties.Settings.Default.AdminPass = Console.ReadLine(); 
                    Properties.Settings.Default.Save();
            }
            Console.WriteLine(Properties.Settings.Default.AdminPass);
            Console.ReadKey();
Миниатюры
Хранить строку в приложении  
0
 Аватар для Kyra90
232 / 153 / 85
Регистрация: 06.10.2020
Сообщений: 468
17.01.2022, 11:21  [ТС]
Вот если так хранить пароль админа, реально?
Нет пароля - первый запуск, а если пароль есть, то с папкой Users можно делать что хочешь. Пользователя Администратор там все равно нет
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
17.01.2022, 12:32
Цитата Сообщение от Kyra90 Посмотреть сообщение
при возвращении обратно в папку программы, были недоступны к использованию?
Ну так я несколько топиков назад говорил же об этой ситуации.
Расписываю по шагам:
Запускается прога - если файл есть, то считывается полностью в некий массив структур:
-имя
-роль
-хеш пароля.

1. Предлагается ввести учетные данные админа. Вводятся пользователем. Если его хеш совпал с тем, что в файле (уже в памяти в структуре), то показываем содержимое структуры на форме. Если не совпал - гуляй вася, жуй опилки..

2. Если при запуске проги файла не оказалось - предлагается создать новый файл с новыми учетными данными. Создали, вошли.
Теперь подмена файлов ничего не даст, так как в памяти находится информация из нового файла. И чтобы прочесть старый, нужно выйти (разлогиниться), и залогиниться в тот старый файл, положив его на место нового. Ну и тут повторяется п.1.

Мои файлы выглядят вот так:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
8f4a3cfd9be04f11663dae2506644336
68a14a2ae9752a05fe910aee22af6000
d8af4aa559ab92665c1fe6dd7491bca8
0f54f3b9eba5b7f8d0ef51704d690a9f
1ee38c01f57df8c58d3ba9f2952f86fd
bab12d2b8e61f38742c645835972d9a4
9afdc075cdc788ee543f99828974e395
d7f11473715bb8df3668afac5d3c0e6a
3a4fe089e48b5a0e0e303fe7925b4350
7ca25e2cc569d75980429192f55ae1b5
a760d0a596d1c3114947ff510b0d1691
772436d1d769754c9a1212d5c8984f00
97bb4c373d5f9adf985
Здесь учетка админа, одного супер-пользователя и двух пользователей. С наскоку и не понять, что тут что.

По поводу "вечного" Админа: как вариант, заведите некоего "системного админа" прям в коде с динамическим паролем, который каждый час/день/неделю разный. Алгоритм его формирования известен только вам. Самого пароля в коде нет, он вычисляется от функции времени F(t), заносится в кучу и там сравнивается с введенным только при попытке авторизации.

Но как правильно заметил Wolfdp, зачем это надо? Если папку утащили, то предполагается "новый запуск" приложения с созданием учеток с нуля. Как уже было сказано выше, подменой файлов при новом админе прочитать данные не получится.

Так же, предусмотреть ситуацию, когда файл есть, в нем есть сведения о пользователях, но отсутствует учетка админа - в таком случае файл считать Broken и так же ничего из него не выводить.

Добавлено через 4 минуты
Цитата Сообщение от HF Посмотреть сообщение
А где или как вы связь старого хэша и нового установили?
Цитата Сообщение от Kyra90 Посмотреть сообщение
Вот и я не поняла
Хеш находится в файле, который пытаются открыть путем ввода пароля. Введенный пароль хешируется и сравнивается с тем что в файле.
Ну что вы как дети, е-мое )
1
 Аватар для Kyra90
232 / 153 / 85
Регистрация: 06.10.2020
Сообщений: 468
17.01.2022, 12:47  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Ну что вы как дети, е-мое )


Цитата Сообщение от wizard41 Посмотреть сообщение
Мои файлы выглядят вот так:
Я так понимаю все пользователи собраны в один файл?

И что Вы скажете по поводу моего предыдущего ответа с кодом?
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
17.01.2022, 12:52
Цитата Сообщение от Kyra90 Посмотреть сообщение
Я так понимаю все пользователи собраны в один файл?
Ну да. Не проблема их разнести по разным, да хоть по букве в каждый файл )
Цитата Сообщение от Kyra90 Посмотреть сообщение
И что Вы скажете по поводу моего предыдущего ответа с кодом?
Это первое что приходит в голову почти каждому, кто работает с настройками своего приложения. Но вам он не совсем подходит.
0
 Аватар для Kyra90
232 / 153 / 85
Регистрация: 06.10.2020
Сообщений: 468
17.01.2022, 12:53  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Ну да. Не проблема их разнести по разным, да хоть по букве в каждый файл )
Не не... мне наоборот больше нравится что все в одном файле

Цитата Сообщение от wizard41 Посмотреть сообщение
Но вам он не совсем подходит.
Почему?
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
17.01.2022, 12:59
Цитата Сообщение от Kyra90 Посмотреть сообщение
мне наоборот больше нравится что все в одном файле
Так и должно быть.
Цитата Сообщение от Kyra90 Посмотреть сообщение
Почему?
Ну опять же, это настройки, которые при желании можно перехватить.
1
 Аватар для Kyra90
232 / 153 / 85
Регистрация: 06.10.2020
Сообщений: 468
17.01.2022, 13:21  [ТС]
wizard41, Если не сложно, можете поделится кодом, как записывать пользователей, чтоб получать
Цитата Сообщение от wizard41 Посмотреть сообщение
Мои файлы выглядят вот так:
Если не сложно - с объяснением. Спасибо

Добавлено через 10 минут
Цитата Сообщение от wizard41 Посмотреть сообщение
перехватить.
А если хранить ее закодированной? При записи в файл я кодирую пароли пользователей, при чтении - раскодирую, если так же делать и с этим параметром?
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
17.01.2022, 13:30
Цитата Сообщение от Kyra90 Посмотреть сообщение
А если хранить ее закодированной?
Чем тогда это будет отличатся от обычного текстового файла с юзерами?

Добавлено через 11 секунд
Зашифрованного
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
17.01.2022, 13:47
Как-то так?
0
 Аватар для Kyra90
232 / 153 / 85
Регистрация: 06.10.2020
Сообщений: 468
17.01.2022, 13:48  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Зашифрованного
Да))

Цитата Сообщение от wizard41 Посмотреть сообщение
Чем тогда это будет отличатся от обычного текстового файла с юзерами?
тем что доступ к ней будет только с программы
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
17.01.2022, 14:08
Цитата Сообщение от Kyra90 Посмотреть сообщение
тем что доступ к ней будет только с программы
Kyra90, плохо на скоку лошадей менять ). Но вы вправе делать так, как видите удобным для себя.
Я, проникшись вашим заданием, решил сделать библу, которую можно подключить хоть к консоли хоть к вин-формам, и управлять юзерами, которые находятся в зашифрованном файле. В дальнейшем, можно расширить функционал, добавив работу с БД различных провайдеров.. Но это если терпения хватит )
В таком случае - как ваши параметры в Properties.Settings будут сочетаться с этой DLL?
Можно, конечно, но пока даже примерно не думал как.

Возьмите, на пример, любой портабельный менеджер паролей. Как она работает? База есть -> входи с паролем. Базы нет -> создавай новую. Пароль забыл? -> иди нафиг. И все. Зачем велики плодить??
1
HF
 Аватар для HF
1342 / 926 / 202
Регистрация: 09.09.2011
Сообщений: 2,753
Записей в блоге: 2
17.01.2022, 14:11
Цитата Сообщение от wizard41 Посмотреть сообщение
библу, которую можно подключить хоть к консоли хоть к вин-формам,
...
как ваши параметры в Properties.Settings будут сочетаться с этой DLL?
Ведь она и должна быть абстрактна, и предоставлять возможность Любому хранилищу хранить зашифрованные данные. Разве нет? И она будет писать в юзерконфиг зашифрованные данные вашей либой.

А что препод скажет, увидев "библу"?
0
 Аватар для Kyra90
232 / 153 / 85
Регистрация: 06.10.2020
Сообщений: 468
17.01.2022, 14:13  [ТС]
Цитата Сообщение от HF Посмотреть сообщение
А что препод скажет, увидев "библу"?
покажи код библиотеки
0
HF
17.01.2022, 14:15

Не по теме:

Цитата Сообщение от Kyra90 Посмотреть сообщение
покажи код библиотеки
Это не ко мне.

0
 Аватар для Kyra90
232 / 153 / 85
Регистрация: 06.10.2020
Сообщений: 468
17.01.2022, 14:29  [ТС]
Цитата Сообщение от HF Посмотреть сообщение
Это не ко мне.
Я просто ответила на вопрос
Цитата Сообщение от HF Посмотреть сообщение
А что препод скажет, увидев "библу"?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.01.2022, 14:29

Где хранить информацию в WPF приложении чтобы её можно было переносить с приложением на любой компьютер?
Народ, привет. У меня есть приложение с БД ( SQL Server ) созданной в Visual Studio 2012. Но эта БД работает не у всех пользователей,...

Где лучше хранить строку подключения к sql?
Форумчане не подскажете где лучше хранить строку подключения к sql? хочу написать универсальный кдасс для получения соединения

Как хранить переменную в приложении
Здравствуйте! Приложение хранится на сервере, в приложении нужно хранить переменную с адресом e-mail сервера, менять эту переменную могут...

Где лучше хранить рисунки в приложении?
Доброго дня. В моём приложении будет пакет рисунков. Куда их лучше положить, в res\drawable или в assets, с прицелом в дальнейшем на то...

Как хранить в приложении большой объем текста
как вставить текст в Visual Basic?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru