Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
.NET 4.x

Добавить файл в ресурсы в готовой программе

16.09.2016, 18:59. Показов 2308. Ответов 25

Студворк — интернет-сервис помощи студентам
Здравствуйте, наверное глупый вопрос, но все таки хотелось бы уточнить.
Можно ли в скомпилированном exe добавить какой либо файл в ресурсы?

P.s. Суть в том, что я написал программу запоминания паролей, шифрованные данные в данный момент хранятся в файлах.
Происходит это так: в программе я нажимаю "добавить" и ввожу какой либо "логин:пароль", потом шифрую этот текст и сохраняю в файл, после чего наименования всех таких сохраненные файлов я отображаю в форме listview. Хотелось бы придать мобильности программке и не таскать за собой кучу файлов с паролями.

Если есть хорошие идеи реализации мобильности, буду благодарен если поделитесь
P.s. В дальнейшем хочу сделать облачное хранилище, чтобы все данные подгружались с сервера, но это уже другая история..
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.09.2016, 18:59
Ответы с готовыми решениями:

CodeDOM. Как поместить файл в ресурсы и как добавить ссылку на сборку из ресурсов?
Здравствуйте, у меня есть функция которая собирает программу из исходного кода на c# public void Build(string name, string sourse,...

Как реализовать обработку исключений в двух функциях в готовой программе?
Здравствуйте, прошу помощи т.к сам не состоянии. Имеются две функции одна скачивает архив с сайта при нажатии на кнопку, а другая...

Добавить dll в ресурсы, потом выгружать в папку с программой
Здравствуйте. Не хочу делать инсталятор программы, т.к. у программы есть всего 1 зависимый dll файл. Хочу добавить этот dll в ресурсы, а...

25
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18404 / 14336 / 5370
Регистрация: 17.03.2014
Сообщений: 29,020
Записей в блоге: 1
22.09.2016, 00:00
Студворк — интернет-сервис помощи студентам
Nalik, 1. Похоже что база не шифруется и пароль хранится хоть и не в открытом виде, но найти его несложно. Опираюсь на информацию из http://www.sqlite.org/src/doc/... r-auth.txt
The built-in version of of sqlite_crypt() uses a simple Ceasar-cypher which prevents passwords from being revealed by searching the raw database for ASCII text, but is otherwise trivally broken. For better password security, the database should be encrypted using the SQLite Encryption Extension or similar technology. Or, the application can use the sqlite3_create_function() interface to provide an alternative implementation of sqlite_crypt() that computes a stronger password hash, perhaps using a cryptographic hash function like SHA1.
В тексте упоминается SQLite Encryption Extension. Оно врядли тебе нужно учитывая что ты планируешь хранить уже зашифрованные данные. Тем более что насколько я понял это платное расширение.

Проверка пароля по идее делается при открытии соединения. Это несложно проверить экспериментальным путем.

2. Если я прав насчет слабого уровня защиты, то пароль можно поменять не зная старого.
1
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
22.09.2016, 09:17  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
1. Похоже что база не шифруется и пароль хранится хоть и не в открытом виде, но найти его несложно.
Значит использовать ключ шифрования как пароль от БД не самая лучшая идея
У меня сейчас в программе данные шифруются хешем от ключа пользователя, т.е. если пользователь ввёл ключ "1234", а данные шифруются md5("1234") - 81dc9bdb52d04dc20036dbd8313ed055,
Как вы думаете, а использовать хеш от хеша ключа как пароль на вход в БД, будет достаточно надежно? Т.е. md5(md5("1234")) - ec6a6536ca304edf844d1d248a4f08dc.

Добавлено через 13 минут
У меня сейчас используется такой подход:
Пользователь вводит секретный ключ:
- БД паролится этим ключом;
- Все данные паролятся этим ключом;
- При следующем запуске программы, она обращается к БД без ключа, если подключение не удалось, то выскакивает окошко, где предлагается ввести секретный ключ.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18404 / 14336 / 5370
Регистрация: 17.03.2014
Сообщений: 29,020
Записей в блоге: 1
23.09.2016, 02:21
Nalik, провел пару экспериментов с неутешительным результатом. Метод SetPassword только делает вид что ставит пароль потому что я спокойно подключаюсь к такой БД и получаю из нее данные. Похоже нужно ставить расширение для шифрования чтобы от этого метода был эффект.

Цитата Сообщение от Nalik Посмотреть сообщение
Значит использовать ключ шифрования как пароль от БД не самая лучшая идея
Так точно

Цитата Сообщение от Nalik Посмотреть сообщение
У меня сейчас в программе данные шифруются хешем от ключа пользователя, т.е. если пользователь ввёл ключ "1234", а данные шифруются md5("1234") - 81dc9bdb52d04dc20036dbd8313ed055,
Как вы думаете, а использовать хеш от хеша ключа как пароль на вход в БД, будет достаточно надежно? Т.е. md5(md5("1234")) - ec6a6536ca304edf844d1d248a4f08dc.
Так делать не надо. Ключ лучше генерировать с помощью класса Rfc2898DeriveBytes. Для создания пароля на SQLite базу он тоже подойдет т.к. у метод SetPassword() есть перегрузка принимающая byte[].
C#
1
2
3
4
5
6
7
8
byte[] GetKey(string password, int keyLength)
{
    byte[] saltBytes = {236,131,52,67,243,196,235,131,188,19,71,157,121,177,209,158,73,165,82,147,38};
    using (var derivedBytes = new Rfc2898DeriveBytes(Encoding.UTF8.GetBytes(password), saltBytes, 4961))
    {
        return derivedBytes.GetBytes(keyLength);
    }
}
1
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
23.09.2016, 18:31  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Так делать не надо. Ключ лучше генерировать с помощью класса Rfc2898DeriveBytes. Для создания пароля на SQLite базу он тоже подойдет т.к. у метод SetPassword() есть перегрузка принимающая byte[].
А какая разница? Разве есть разница буду я шифровать данные сразу хешем ключа или сгенерирую ключ на основе хеша ключа. Если в итоге получается тоже самое, пароль от зашифрованных данных и от БД будет один и тот же. И допустим если взломают БД и вытащат от туда пароль установленный на эту БД, то мы получаем зашифрованный ключ который используется для шифрования данных.

Цитата Сообщение от OwenGlendower Посмотреть сообщение
byte[] saltBytes = {236,131,52,67,243,196,235,131,188,19,71 ,157,121,177,209,158,73,165,82,147,38};
А если учесть, что у программы будет исходный код открыт или взломан, разве эти данные безопасно хранить прямо в программе, при условии, что к примеру из базы на SQLite все таки вытащили пароль. С помощью этих данных можно же будет подобрать чистый ключ который используется для шифрования.
--
Наверное в идеальном виде, пароль на БД лучше вообще не ставить, если так или иначе тянется зависимость этого пароля на секретный ключ, зачем лишняя дырка
Просто устанавливать какой-нибудь стандартный для всех пользователей, чтобы в другой программе нельзя его было открыть и посмотреть.
А в своей программе тоже сделать определенную защиту в этом случае. Например заносить в отдельную таблицу зашифрованное слово "True" и при открытии программы пытаться его расшифровать с помощью введенного ключа, если мы получаем слово "True", то считаем, что соединение к БД прошло успешно, если получаем какие либо другие данные, то пишем типа "неверный секретный ключ"

Добавлено через 9 минут
Таким образом мы ограничим доступ к самой БД другим программам и своей в том числе. Правда минус тут тоже имеется, если исходный код будет открыт или взломан, то смысла от этого изврата нету)
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
23.09.2016, 19:57
Цитата Сообщение от Nalik Посмотреть сообщение
если исходный код будет открыт или взломан, то смысла от этого изврата нету
Nalik, я же вам давал проект, там есть защита даже от потери БД, все данные в ней зашифрованы. То есть, не надо хранить в БД данные, а хранить массив байт, представляющий собой блок данных, зашированный ключом (например, сертификатом). Тогда, даже получив исходный код и БД, взломщик, не имея сертификата, ничего не узнает.
0
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
23.09.2016, 22:38  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Nalik, я же вам давал проект, там есть защита даже от потери БД, все данные в ней зашифрованы. То есть, не надо хранить в БД данные, а хранить массив байт, представляющий собой блок данных, зашированный ключом (например, сертификатом). Тогда, даже получив исходный код и БД, взломщик, не имея сертификата, ничего не узнает.
У меня так и есть, в данный момент если взломщик получит исходный код и БД, он ничего не узнает. Данные в БД зашифрованы AES, переведенным в строковый модифицированный base64. Однако по мимо самих данных в БД, я хотел бы защитить и саму БД (хотя не понимаю если честно зачем мне это нужно), но хочется. Получается её тоже нужно защищать паролем, но делать пароль на основе ключа шифрования от данных нельзя, т.к. это будет не безопасно. А вводить 2 ключа при входе в программу: от БД и от данных не удобно.

Ни у кого такого не бывало, когда сам не знаешь чего хочешь.. надо больше спать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.09.2016, 22:38

Ресурсы в отдельный файл
Есть некоторое количество аудиофайлов, которые не часто используются, но много весят из-за .wav Как вынести их за пределы .exe? Чтобы в...

Добавить деструктор к готовой программе
#include <iostream> #include <conio.h> using std::cout; #pragma hdrstop #pragma argsused class vect { public: vect(int =...

Как добавить файл в ресурсы?
Нужно добавить .h файл в ресурсы вида: unsigned char funky = {1, 2, 3}... Но Builder пишет: Error: RLINK32: Unsupported 16bit...

К готовой проге добавить запись в файл. Найдите ошибку
вот исходный код готовой программы, нужно добавить чтоб она считывала исходный текст из файла и записывала результат в другой файл. но...

Как в программе можно открыть файл, с уже готовой базой данных в Access
Скажите как в программе можно открыть файл, с уже готовой базой данных в Access


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
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) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru