| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Шифрование файла (file encryption/encoding) |
| Автор: Yogurt 22.10.2010, 11:56 |
| Есть файл txt, в котором лежит полезная информация для обработки данных с помощью написанной программы. Как закодировать или зашифровать файл, чтобы пользователь не мог его посмотреть, а если и смог бы, то ничего бы в нём не понял. Файл объёмом 150 КБ, у файла есть повторяющаяся каждую строчку структура (короче там лежит много параметров с множеством настроек для каждого: 1 строка - 1 параметр) Поставил настройку SetFileAttributes(FileName, FILE_ATTRIBUTE_HIDDEN); но это мало помогает Что ещё можно сделать и есть ли функция установки пароля на файл P.S. В основном прогаю в MFC, но в данном случае на код это оказывает посредственное влияние |
| Автор: EvilsInterrupt 22.10.2010, 12:10 |
| Yogurt, задачи : 1) определить от кого скрываемся 2) определить как шустро должны выполняться шифрование\расшифровка 3) определить как раскрывать информацию при работе? Частями или можно целиком? |
| Автор: Yogurt 25.10.2010, 10:10 |
| 1) Скрываем информацию от пользователей 2) Должно открываться шустро. Размер файла будет максимум около 200 Кб, поэтому обычно помещается в оперативную память. Думаю, небольшие преобразования перед этим не повлияют на скорость работы машины 3) Раскрывать целиком Я подумал, что можно не сам файл шифровать, а его содержимое. Типа брать каждый байт и менять его левую и правую части Наверное, многие уже сталкивались с этим. Как решили задачу? С какими проблемы обнаружились? |
| Автор: baldina 25.10.2010, 10:41 | ||||||
поэт...
э-э... дайте определение, что есть 'сам файл', а что - 'его содержимое'
Для начала нужно определить требуемую криптостойкость. Если от пионэров закрываться, можно начать с простейшей подстановки в стиле пляшущих человечков. типа A->B, B->C и т.д. http://protect.htmlweb.ru/p11.htm |
| Автор: Yogurt 1.11.2010, 14:04 |
| По-поводу "сам файл, или его содержимое" - файл можно открыть стандартными средствами Винды. Мне интересно, можно ли программно заблокировать файл от Ворда, Экселя и, если получится, блокнота? По-поводу пляшущих человечков - надеялся, что кто-то уже с этим сталкивался, и расскажет, какие шишки набил. В основном интересует скорость работы с файлом, так как в программе предусмотрено его редактирование. На счёт содержимого - на файл можно смотреть, как на набор байт, а можно - как на набор символов. Как лучше для кодирования данных? |
| Автор: baldina 1.11.2010, 15:17 | ||||||||
А что такое байт? А это - символ из алфавита (0..255). Так что для кодирования без разницы...
конечно. Вам ссылку дали, оттуда ноги растут на другие ссылки... С этим сталкивались столько, что написаны горы литературы. А что касается простейшей реализации пляшущих человечков - это на 10 мин работы. Для начинающих - час.
можно. хотя сложно и ненадежно (на всякий винт с резьбой найдется...) шифруйте, и будет вам счастье. простейший способ - сделайте в цикле для каждого символа/байта файла операцию кодирования:
раскодирование - той же самой операцией. а пока юзеры будут ломать эту "защиту" изучайте литературу |
| Автор: Леопольд 2.11.2010, 12:53 | ||
|
| Автор: Yogurt 2.11.2010, 13:28 |
| Решил вопрос следующим образом: Создал кодирующий/декодирующий класс. При открытии файла или изменении его содержимого все символы (строками или по отдельности) "проходят" через этот класс. Причём символы шифруются одним, двумя или тримя символами Это не очень шустро, но пару секунд пользователь потерпеть может Спасибо всем, кто отписался. Для baldina : Байт, это не символ, это 8 бит. Символ по значению в разных кодировках значит разное. Как вариант - думал над побитовым считыванием байта, и затем поменять местами первую и вторую половину байта |
| Автор: Master01 2.11.2010, 14:29 | ||
Я думаю, имелось ввиду, что алгоритмам шифрования, в принципе, по барабану. Они работают с битами, точнее с последовательностями некоторой длины, а уж во что те биты складываются их не интересует. |
| Автор: baldina 2.11.2010, 16:58 | ||||||
Yogurt,
http://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%B9%D1%82 http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D1%84%D0%B0%D0%B2%D0%B8%D1%82_(%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F) Добавлено через 10 минут и 39 секунд
С реализацией все понятно. А с конечной целью не очень. Какие угрозы вы предотвращаете? Какой ущерб хотите предотвратить? http://ru.wikipedia.org/wiki/%D0%91%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8 http://78.85.20.33:3232/department/security/secbasics/index.html для начала... а на "3" вопрос такой: какое отношение имеет фраза
к шифрованию файла? |
| Автор: bass 6.11.2010, 20:47 | ||
Зашифровал буфер расшифровал WinAPI А чтоб вордом нельзя было открыть CreateFile но только когда твое приложение запушено с флагом доступ в монопольном режиме..... |
| Автор: Yogurt 7.12.2010, 11:12 | ||
Забил на шифрование из за путаницы при исправлении файла, и сделал маленькую прогу. Текст файла лежит в файле txt, Unicode. Меняю местами все символы (Unicode = DWORD). Так как меняются ещё и символы переноса и окончания строки \n и \r, то после преобразования становится всё совсем непонятно. Всё восстанавливается тем же кодом.
|
| Автор: xvr 7.12.2010, 12:30 |
| Способ 'шифровки' взламывается наблюдением содержимого 'зашифрованного' файла в hex виде где то секунд за 5-10. 'Расшифровщик' пишется с нуля минут за 10. Резюме - использовать в программе уровня выше 'Hello world!' категорически запрещается. |
| Автор: Yogurt 25.12.2010, 11:03 | ||
| Прислушался к совету коллег, и попробовал зашифровать с помощью криптостойкого алгоритма, но в результате понял, что наиболее просто, это развернуть каждый байт (в моём случае - каждые 2 байта, тк Юником) в обратном направлении. Алгоритм получился симметричным (им зашифровываю и расшифровываю) Собственно вот:
P.S. Делаю, как я уже писал, в МФК, но переделать по fopen() и тп не составит труда |
| Автор: xvr 25.12.2010, 13:31 | ||||||
Возьмите RC4 и не мучайтесь
Использование:
|