Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/58: Рейтинг темы: голосов - 58, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 4

Шифровка данных через операцию XOR на C#?

13.03.2013, 03:00. Показов 11766. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу разобраться как обратно расшифровать данные с помощью XOR
Это шифрую:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 byte[] bydata = new byte[200];
                char[] chardata = new char[200];
                FileStream afile = new FileStream(@"D:\Laba7.txt", FileMode.Open);
                afile.Seek(0,SeekOrigin.Begin);
                afile.Read(bydata, 0, 200);
                
                Decoder d = Encoding.UTF8.GetDecoder();
                d.GetChars(bydata, 0, bydata.Length, chardata, 0);
                Console.WriteLine(chardata);
 
                string newstr = "";
                for (int i = 0; i < afile.Length; i++)
                 
                  newstr+=(chardata[i]^120);
                
                
               Console.WriteLine(newstr);
А когда расшифровую то получаю какой то бред :

C#
1
2
3
4
5
             for (int i = 0; i < file.Length; i++)
 
                    newstr += (120 ^ chardata[i]);
                
               Console.WriteLine(newstr);
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.03.2013, 03:00
Ответы с готовыми решениями:

Шифровка и расшифровка файла XOR
Привет! Помогите, пожалуйста, новичку в WinForms с программой. Мне нужно выбирать файл, потом выбрав нужный радиобаттон соответственно...

Написать функцию, реализующую операцию побитового xor
дали задание не могу понять даже что делать подскажите по заданию литературу или сайт какой или ветку на форуме При написании...

Какой программой можно произвести побитово операцию обратную XOR?
Есть программа WinHex которая позволяет работать с информацией побитово. Например можно провести с каждым битом операцию XOR #AA У...

10
 Аватар для GoldenId
142 / 143 / 64
Регистрация: 11.11.2010
Сообщений: 877
Записей в блоге: 10
13.03.2013, 06:07
Прежде всего делать так
C#
1
2
3
            string newstr = "";
            for( int i = 0; i < afile.Length; i++ )
                newstr += ( chardata[ i ] ^ 120 );
это создавать большой оверхед. На каждой итерации у Вас создается новый объект класса String, в него копируются все символы из предыдущего, а этот предыдущий отправляется к GarbageCollect'ору.

Вот вариант, который подразумевали разработчики:
C#
1
2
3
4
            StringBuilder sb = new StringBuilder( afile.Lenght );
            for( int i = 0; i < afile.Lenght; i++ )
                sb.Append( chardata[ i ] ^ 120 );
            string newline = sb.ToString();
Секрет в том, что класс String - константный, он не подлежит изменению, как только создан. StringBuilder призван залатать этот идиотизм.

Добавлено через 47 минут
Вот то, что, насколько я понял, Вам нужно.
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
            // чтение из файла
            String text = File.ReadAllText( @"D:\Laba7.txt" );
 
            Console.WriteLine( "Исходный текст" );
            Console.WriteLine( text );
            Console.WriteLine();
 
            // кодирование
            StringBuilder encrypted = new StringBuilder( text.Length );
            for( int i = 0; i < text.Length; i++ )
                encrypted.Append( ( char ) ( text[ i ] ^ 120 ) ); 
 
            Console.WriteLine( "Закодированный вариант:" );
            Console.WriteLine( encrypted.ToString() );
            Console.WriteLine();
 
            // раскодирование
            StringBuilder decrypted = new StringBuilder( text.Length );
            for( int i = 0; i < text.Length; i++ )
                decrypted.Append( ( char ) ( encrypted[ i ] ^ 120 ) );
 
            Console.WriteLine( "Раскодированный вариант:" );
            Console.WriteLine( decrypted.ToString() );
            Console.ReadLine();
А со StringBuilder'ами - кто называет это маразмом, а кто навыком программирования
1
 Аватар для Anklav
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
13.03.2013, 09:27
а не проще в массив байтов шифровать/дешифровать а потом уже его в стринг переводить?!

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        public static void XOREncipher(ref byte[] Data, byte[] PasswordBytes)
        {
            if (Data == null && PasswordBytes == null)
                return;
 
            int ProcessedByteOfPass = 0;
 
            for (int i = 0; i < Data.Length; i++)
            {
                Data[i] = (byte)(Data[i] ^ PasswordBytes[ProcessedByteOfPass]);
 
                ProcessedByteOfPass++;
                if (ProcessedByteOfPass >= PasswordBytes.Length)
                    ProcessedByteOfPass = 0;
            }
        }
использование:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            string str = "строка";
            string newstr;
 
            byte[] data = Encoding.GetEncoding(1251).GetBytes(str);
 
            //ширование
            XOREncipher(ref data, new byte[] { 200 });
            //смотрим результат
            newstr = Encoding.GetEncoding(1251).GetString(data);
            MessageBox.Show(newstr);
            //дешифрование
            XOREncipher(ref data, new byte[] { 200 });
            //смотрим результат
            newstr = Encoding.GetEncoding(1251).GetString(data);
            MessageBox.Show(newstr);
ЗЫ пароль может содержать не только 1 символ.
1
 Аватар для GoldenId
142 / 143 / 64
Регистрация: 11.11.2010
Сообщений: 877
Записей в блоге: 10
13.03.2013, 20:46
1) Смысл вводить длинный ключ, если использовать всё равно один байт?
2) Yaroslav333 и не говорил, что ему нужен длинный ключ.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
13.03.2013, 21:36
Цитата Сообщение от GoldenId Посмотреть сообщение
Секрет в том, что класс String - константный, он не подлежит изменению, как только создан. StringBuilder призван залатать этот идиотизм.
Что значит идиотизм? Вы думаете, это не было так задумано, а просто "так получилось"?о_0
0
13.03.2013, 21:46

Не по теме:

1)У меня была реализован данный метод (занимался недавно программой для шифрования файлов, использовал как часть своего алгоритма) и собственно выложил не переделывая, зачем упрощать?
2) То есть я должен был полностью программу за автора написать? я выложил ПРИМЕР использования.

PS странные у вас какие-то замечания

0
Заблокирован
13.03.2013, 21:57
C#
1
2
3
4
5
6
7
8
9
const string inputFile = @"input.txt";
const string outputFile = @"output.txt";
const byte key = 120;
 
// зашифровали
File.WriteAllBytes(outputFile, File.ReadAllBytes(inputFile).Select(x => (byte)(x ^ key)).ToArray());
            
// расшифровали
File.WriteAllBytes(inputFile, File.ReadAllBytes(outputFile).Select(x => (byte)(x ^ key)).ToArray());
2
14.03.2013, 04:18

Не по теме:

Цитата Сообщение от Psilon Посмотреть сообщение
Что значит идиотизм? Вы думаете, это не было так задумано, а просто "так получилось"?о_0
Всё можно оправдать дескать this is not a bug, это следствия из дальновидного замысла. В 2010 PowerPoint'е нет способа создать автоматическое оглавление. Почему? Не вписывалось в бюджет? У Microsoft-то? Афайк по идеологическим соображениям.
...
С другой стороны врядли стоит брюзжать, в целом-то каркас - очень удобная штука, если... если не брюзжать :)

0
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 4
19.03.2013, 23:21  [ТС]
Всем большое спасибо за помощь!
0
 Аватар для stels009
16 / 15 / 1
Регистрация: 05.04.2011
Сообщений: 426
20.03.2013, 04:39
а почему именно XOR я бы вам посоветовал данный класс использовать:
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
using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
 
namespace RSDN
{
    public class Crypt
    {
        public static byte[] Encrypt(byte[] data,string password)
        {
            SymmetricAlgorithm sa = Rijndael.Create();
            ICryptoTransform ct = sa.CreateEncryptor(
                (new PasswordDeriveBytes(password,null)).GetBytes(16),
                new byte[16]);
 
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms,ct,CryptoStreamMode.Write);
 
            cs.Write(data,0,data.Length);
            cs.FlushFinalBlock();
 
            return ms.ToArray();
        }
 
        public static string Encrypt(string data,string password)
        {
            return Convert.ToBase64String(Encrypt(Encoding.UTF8.GetBytes(data),password));
        }
 
        static public byte[] Decrypt(byte[] data,string password)
        {
            BinaryReader br = new BinaryReader(InternalDecrypt(data,password));
            return br.ReadBytes((int)br.BaseStream.Length);
        }
 
        static public string Decrypt(string data,string password)
        {
            CryptoStream cs = InternalDecrypt(Convert.FromBase64String(data),password);
            StreamReader sr = new StreamReader(cs);
            return sr.ReadToEnd();
        }
 
        static CryptoStream InternalDecrypt(byte[] data,string password)
        {
            SymmetricAlgorithm sa = Rijndael.Create();
            ICryptoTransform ct = sa.CreateDecryptor(
                (new PasswordDeriveBytes(password,null)).GetBytes(16),
                new byte[16]);
 
            MemoryStream ms = new MemoryStream(data);
            return new CryptoStream(ms,ct,CryptoStreamMode.Read);
        }
    }
}
Просто, быстро, удобно, понятно.
0
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
20.03.2013, 07:40
Цитата Сообщение от Anklav Посмотреть сообщение
а не проще в массив байтов шифровать/дешифровать а потом уже его в стринг переводить
Согласен с анклавом. Если уж так приперло собственные шифраторы и дешифраторы писать, то лучше всего определить класс с архитектурой и тщательно разбить его функции и обязанности на методы:
1 метод для шифрования
2 метод для дешифрования
3 метод для возврата значения

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

Если интересно могу показать как вижу это я.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.03.2013, 07:40
Помогаю со студенческими работами здесь

Реализовать операцию вставки нового элемента в отсортированный список и операцию извлечения из списка данных
реализовать операцию вставки нового элемента в отсортированный список и операцию извлечения из списка данных о 3-х студентов с самым низким...

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

Шифровка и расшифровка через текстовые файлы
Добрый вечер всем ! Задание такое необычное. Надо составить программу, которая создаст шифровку и расшифровку Naiva teksta(как я...

шифровка данных
подскажите как шифровать\дешифровать данные (конкретно текст нужно), спрашивал на других форумах вечно говорят типа md5 и т.д. а можно...

Исключающее ИЛИ (XOR). Нужен пример операции побайтного XOR
Может кто-нибудь привести пример операции побайтного XOR?что-то вроде: есть данные,считанные из файла любого формата,эти данные по...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru