Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5

Методы кодирования файлов

10.02.2011, 16:45. Показов 3529. Ответов 5
Метки нет (Все метки)

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

Как использовать несколько файлов формата cs в языке C#, их методы и классы?
Как пользоваться несколькими файлами формата cs в языке C#? проект состоит из нескольких файлов cs например консольный главный ...

Методы кодирования графической информации
Как вы считаете какие есть недостатки в методах кодирования графической информации?

Методы разреженного кодирования (sparse coding) с обучением словаря (dictionary learning)
Приветствую всех. К настоящему моменту я вплотную занялся изучением методов разреженного кодирования. По началу всё показалось не...

5
Заблокирован
10.02.2011, 17:15
Цитата Сообщение от outoftime Посмотреть сообщение
не могли-бы вы подсказать простейший алгоритм шифрования/декодирования файла?
- циклический сдвиг байта на полбайта(он же и дешифровка)
- сериализация

Добавлено через 27 минут
уточню: бинарная сериализация
1
 Аватар для Unril
826 / 717 / 110
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
10.02.2011, 18:16
http://msdn.microsoft.com/ru-r... 9ye3s.aspx
http://msdn.microsoft.com/ru-r... raphy.aspx
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
10.02.2011, 19:16  [ТС]
Делаю так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        private void EncodeXml(string xmlPath, string outPath)
        {
            byte[] bytes = File.ReadAllBytes(xmlPath);
            for (int i = 0; i < bytes.Length; ++i)
            {
                bytes[i] = (bytes[i] << 4) | (bytes[i] >> 4);
            }
            File.WriteAllBytes(outPath, bytes);
        }
 
        private string DecodeXml(string encodedPath)
        {
            byte[] bytes = File.ReadAllBytes(encodedPath);
            for (int i = 0; i < bytes.Length; ++i)
            {
                bytes[i] = (bytes[i] << 4) | (bytes[i] >> 4);
            }
 
            string xml = Environment.CurrentDirectory + @"Test.temp";
            File.WriteAllBytes(xml, bytes);
            string res = File.ReadAllText(xml);
            File.Delete(xml);
 
            return res;
        }
Недостаточно шифруется файл, некотрые символы не изменяються.

Добавлено через 2 минуты
Unril, можете показать пример, а то не очень ясно для чего все это.

Добавлено через 43 минуты
А все, понял, вот что у меня вышло:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        private void EncodeXml(string xmlPath, string outPath)
        {
            byte[] bytes = File.ReadAllBytes(xmlPath);
            for (int i = 0; i < bytes.Length; ++i)
            {
                bytes[i] ^= this.encodeConst;
            }
            File.WriteAllBytes(outPath, bytes);
        }
 
        private string DecodeXml(string encodedPath)
        {
            byte[] bytes = File.ReadAllBytes(encodedPath);
            for (int i = 0; i < bytes.Length; ++i)
            {
                bytes[i] ^= this.encodeConst;
            }
 
            string xml = Environment.CurrentDirectory + @"Test.temp";
            File.WriteAllBytes(xml, bytes);
            string res = File.ReadAllText(xml);
            File.Delete(xml);
 
            return res;
        }
Кто знает как с массива байтов сделать строку?
0
 Аватар для Unril
826 / 717 / 110
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
10.02.2011, 20:51
Тут показан пример шифорвания/дешифрования xml файла:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
using System;
using System.Drawing;
using System.IO;
using System.Runtime.Serialization;
using System.Security.Cryptography;
using System.Security.Cryptography.Xml;
using System.Windows.Forms;
using System.Xml;
 
namespace WindowsFormsApplicationTest2 {
    public partial class MainForm : Form {
        private readonly SymmetricAlgorithm key;
 
        public MainForm() {
            InitializeComponent();
 
            key = new RijndaelManaged {
                KeySize = 128
            };
            textBox1.Text = string.Join( "", key.Key );
        }
 
        private void buttonSave_Click( object sender, EventArgs e ) {
            // Создаём экземпляр класса
            Bitmap bitmap = new Bitmap( "test.jpg" );
            MyClass myClass = new MyClass {
                MyBitmap = bitmap,
                Name = "Bitmap1"
            };
 
            DataContractSerializer serializer = new DataContractSerializer( typeof ( MyClass ) );
            XmlDocument document = new XmlDocument();
            using ( Stream stream = new MemoryStream() ) {
                // Сериализуем в поток
                using ( XmlWriter writer = XmlWriter.Create( stream ) ) {
                    serializer.WriteObject( writer, myClass );
                }
 
                // Переходим в начало потока
                stream.Seek( 0, 0 );
 
                // Загружаем поток c xml в document
                using ( XmlReader reader = XmlReader.Create( stream ) ) {
                    document.Load( reader );
                }
            }
 
            // Шифруем
            Encrypt( document, key );
 
            // Сохраняем
            document.Save( "test.xml" );
        }
 
        private void buttonOpen_Click( object sender, EventArgs e ) {
            DataContractSerializer serializer = new DataContractSerializer( typeof ( MyClass ) );
            MyClass myClass;
 
            // Загружаем файл
            XmlDocument document = new XmlDocument();
            document.Load( "test.xml" );
 
            // Дешифруем
            Decrypt( document, key );
 
            using ( Stream stream = new MemoryStream() ) {
                // Сохраняем в поток
                document.Save( stream );
 
                // Переходим к началу потока
                stream.Seek( 0, 0 );
 
                // Десериализуем
                using ( XmlReader writer = XmlReader.Create( stream ) ) {
                    myClass = (MyClass)serializer.ReadObject( writer );
                }
            }
 
            // Считываем данные из полученного экземпляра
            pictureBox1.Image = myClass.MyBitmap;
            Text = myClass.Name;
        }
 
        public static void Encrypt( XmlDocument doc, SymmetricAlgorithm key ) {
            // Элемент, который будем шифровать - корневой элемент документа
            XmlElement elementToEncrypt = doc.DocumentElement;
 
            if ( elementToEncrypt == null ) {
                throw new XmlException( "Элемент не найден." );
            }
 
            // Класс, использующийся для ширования
            EncryptedXml encryptedXml = new EncryptedXml();
 
            // Метод EncryptData возвращает зашифрованный элемент в виде массива шифрованных байтов.
            var encryptData = encryptedXml.EncryptData( elementToEncrypt, key, false );
 
            // URL-идентификатор сообщает расшифровывающей стороне о том, 
            // что XML-документ содержит зашифрованный элемент.
            EncryptedData encryptedData = new EncryptedData {
                Type = EncryptedXml.XmlEncElementUrl
            };
 
            // Определяем алгоритм шифрования
            string encryptionMethod = null;
 
            if ( key is TripleDES ) {
                encryptionMethod = EncryptedXml.XmlEncTripleDESUrl;
            }
            else if ( key is DES ) {
                encryptionMethod = EncryptedXml.XmlEncDESUrl;
            }
            if ( key is Rijndael ) {
                switch ( key.KeySize ) {
                    case 128:
                        encryptionMethod = EncryptedXml.XmlEncAES128Url;
                        break;
                    case 192:
                        encryptionMethod = EncryptedXml.XmlEncAES192Url;
                        break;
                    case 256:
                        encryptionMethod = EncryptedXml.XmlEncAES256Url;
                        break;
                }
            }
            else {
                throw new CryptographicException( "Неподдерживаемый алгоритм." );
            }
 
            encryptedData.EncryptionMethod = new EncryptionMethod( encryptionMethod );
 
            // Добавляем зашифрованные данные элемента в объект EncryptedData.
            encryptedData.CipherData.CipherValue = encryptData;
 
            // Заменяем старый элемент зашифрованным
            EncryptedXml.ReplaceElement( elementToEncrypt, encryptedData, false );
        }
 
        public static void Decrypt( XmlDocument doc, SymmetricAlgorithm key ) {
            // Элемент для дешифровки
            XmlElement encryptedElement = doc.GetElementsByTagName( "EncryptedData" )[ 0 ] as XmlElement;
 
            if ( encryptedElement == null ) {
                throw new XmlException( "Элемент не найден." );
            }
 
            // Создаём EncryptedData объект и заполняем его.
            EncryptedData edElement = new EncryptedData();
            edElement.LoadXml( encryptedElement );
 
            // Создаём EncryptedXml объект.
            EncryptedXml exml = new EncryptedXml();
 
            // Дешифруем, использую ключ
            var rgbOutput = exml.DecryptData( edElement, key );
 
            // Заменяем зашифрованные данные расшифрованными.
            exml.ReplaceData( encryptedElement, rgbOutput );
        }
    }
 
    // Класс для сериализации
    [Serializable]
    [DataContract]
    public class MyClass {
        [DataMember]
        public Bitmap MyBitmap { get; set; }
 
        [DataMember]
        public string Name { get; set; }
    }
}
Хотя можно просто сохранить в gzip и мало кто догадается, что это просто сжатый файл.
1
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
12.02.2011, 13:31  [ТС]
Unril, Да, но если юзер реально продвинутый и у него есть WinRar или 7zip тогда с помощью контекстного меню он может его разархивировать. Под "юзер реально продвинутый" понимаю пользователя, который смекалистый, типа школьников и студентов, но не технических специальностей, т.е. он не станет дисасемблировать (с дот нет не имеет связи, это просто пример) исходные файлы и умеет пользоватся только пользовательским ПО, типа текствовых редакторов и т.д.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.02.2011, 13:31
Помогаю со студенческими работами здесь

Изучение видов преобразования речи, использующих гибридные методы кодирования речевого сигнала. Линейное предсказание с кодовым возбуждением
Не могу довести до ума программу. Отделил основную и подпрограммы, вместе получилось 10 отдельных программ. Основное тело программы...

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

Графики "Методы цифрового кодирования"
Нужно построить графики, имея битовую последовательность. Метод цифрового кодирования: биполярный импульсный код; Битовая...

.dll для кодирования и раскодирования файлов в формате .zip
Где можно найти .dll для лщдирования и раскодирования файлов в формате .zip?? На сайте http://modemss.brisnet.org.au/~mlevoi/dos.html не...

Численные методы / физика / сортировка массивов и файлов
к сожалению не усвоила фортран на том уровне, что с нас требуют &gt;.&lt; поэтому, прошу помощи в решении задач. 1) численные методы: ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru