Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
1

Шифрование бинарные операции + Base64String с использованием ключа

13.08.2016, 12:08. Показов 1449. Ответов 6

Author24 — интернет-сервис помощи студентам
Немного поэкспериментировал с шифрованием, в итоге собрал такой класс:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    class Encryption
    {
        // Переменная ключа со значением по умолчанию
        public string Key { get; set; } = "def_pass";
        public string Text { get; set; }
 
        public string NewText  => new string(Text
            .Select((c, i) => (char)(~c ^ Key[i % (Key.Length - 1)]))
            .ToArray());
 
        public string TextEncription => new string(Convert.ToBase64String
            (Encoding.UTF8.GetBytes(NewText)).Reverse().ToArray());
        public string TextDecryption => new string(
            Encoding.UTF8.GetString((Convert.FromBase64String
                (new string(Text.Reverse().ToArray()))))
            .Select((c, i) => (char)(~c ^ Key[i % (Key.Length - 1)]))
            .ToArray());       
    }
Можно шифровать/расшифровывать просто через NewText или через TextEncription/TextDecryption
Хотелось бы увидеть мнение.
Ну и простенький кейген
C#
1
2
3
4
5
6
7
8
9
10
11
    class KeyMaker
    {
        public string KeyVal1 { get; } = "absdefghigklmnopqrstuvwxyz";
        public string KeyVal2 { get; } = ".:;^%&*()";
        string KeyVal3 => KeyVal1.ToUpper();
 
        int KeyLength { get; } = 5;
        Random rnd = new Random();
        public string KeyGen => new string($"{KeyVal1}{KeyVal2}{KeyVal3}"
        .OrderBy(k => rnd.Next()).Take(KeyLength).ToArray());
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.08.2016, 12:08
Ответы с готовыми решениями:

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

Произвести шифрование с использованием поразрядной операции «исключающее или»
Помогите пожалуйста с задачкой! Считать две строки: «текст» и «ключ». Произвести шифрование с...

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

Шифрование ключа
Всем доброе время суток, есть значение HDD "ST3250620AS" подскажите как его зашифровать так что бы...

6
3462 / 2473 / 695
Регистрация: 02.08.2011
Сообщений: 6,704
13.08.2016, 12:35 2
Цитата Сообщение от EveKS Посмотреть сообщение
Хотелось бы увидеть мнение.
Будет ли NewText возвращать читабельную строку? А если текст равен null?

TextEncription не делает ту работу по которой назван.
Имхо, нифига не читабельно.

К плюсам только то, что вы Key[i % (Key.Length - 1)] отрефакторили код из той старой темы.

Добавлено через 4 минуты
Имхо, криптопровайдер должен иметь всего три 3(4) основных члена: ключ, метод для шифрования, метод для дешифровки, [используемый алгоритм]. То есть свойства Тext и NewText тут не нужны.

Добавлено через 1 минуту
* Речь о симметричном шифровании.
0
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
13.08.2016, 13:02  [ТС] 3
IamRain, ну код-то мой, в той старой теме =))
Насчет проверки, то можно как-то так:
C#
1
public bool IsEmpty => string.IsNullOrWhiteSpace(Text);
TextEncription - шифрует.
NewText возвращает читабельную строку, точнее если использовать его повторно(Encoding.BigEndianUnicode).
TextDecryption - можно будет добавить проверку на Base64String.

Следующий вызов:
C#
1
2
3
4
5
6
7
8
9
            Encryption enc = new Encryption();
            string msg = "Hello World!";
 
            enc.Text = msg;
            Console.WriteLine(enc.TextEncription);
            enc.Text = enc.TextEncription;
            Console.WriteLine(enc.TextDecryption);
 
            Console.ReadKey(false);
Даст:
Код
u677E+771+77o+770+77b+77+677g+77M+771+77/+77T+77
Hello World!
Добавлено через 1 минуту
Цитата Сообщение от IamRain Посмотреть сообщение
То есть свойства Тext и NewText тут не нужны.
Эти шаги легко убрать.

Добавлено через 4 минуты
Как шифрует:
C#
1
Принимает строку => делаем реверс => далее конвертация в byte[] + ToBase64String => и сверху бинарные операции.
C#
1
2
3
4
5
        public string TextEncription(string text) =>
            new string(Convert.ToBase64String
            (Encoding.UTF8.GetBytes(new string(text
            ?.Select((c, i) => (char)(~c ^ Key[i % (Key.Length - 1)]))
            .ToArray()))).Reverse().ToArray());
Добавлено через 5 минут
малость не так написал - реверс после
Принимает строку => и сверху бинарные операции. => далее конвертация в byte[] + ToBase64String => делаем реверс

Просто был и другой вариант.
0
3462 / 2473 / 695
Регистрация: 02.08.2011
Сообщений: 6,704
13.08.2016, 13:15 4
Ну код то работает, согласен. Но все равно, почитайте про SRP принцип проектирования.
Криптопровайдер не должен иметь такие зависимости как исходный текст, зашифрованный текст, это должны быть входные и выходные данные(зависимости) только в соответствующих операциях.
А зачем реверс? Чтобы сложнее казалось?

Добавлено через 4 минуты
Вот, почитайте http://sergeyteplyakov.blogspo... st_19.html
+ можно вам ознакомиться с таким понятием, как "инвариант".
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
13.08.2016, 23:26 5
EveKS, в коде есть баг. Из-за записи i % (Key.Length - 1) последний символ ключа никогда не используется и значит если Key содержит только один символ, то мы получим IndexOutOfRangeException. Нужно брать остаток от Key.Length.

Кроме этого алгоритм шифрования не всегда верно работает. У меня он не смог правильно зашифровать и расшифровать строку "\u24AF\u24A3\u24A0 \u24AC\u24B0\u24A4\u249E\u24A6 \u249D\u24AD\u24AA\u24B2\u24A9 \u24A1\u24AA\u24B3 \u24A5\u24B0\u24A8\u24AB\u24AE \u24AA\u24B1\u24A0\u24AD \u24AF\u24A3\u24A0 \u24A7\u249C\u24B5\u24B4 \u249F\u24AA\u24A2"
1
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
14.08.2016, 08:44  [ТС] 6
OwenGlendower, что-то не получается... постоянно выводит что-то типо: fgd rcqqf d]rcq fgd rcqqf d]rc qfg ]rcq fgd... Как не менять \u24AF\u24A3\u24A0 - не пойму.
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
14.08.2016, 11:00 7
EveKS, всё правильно. Это признак неправильной работы про который я и говорил.
0
14.08.2016, 11:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.08.2016, 11:00
Помогаю со студенческими работами здесь

Шифрование XOR не кодирует бинарные данные
Текст кодирует/декодирует нормально.Бинарные файлы НЕТ. char tst="fnfdnbdlfkbpfdgkgfdm"; wchar_t...

Бинарные операции
Помогите написать две программы 1) Шифрование методом "исключающего или" 2) Шифрование и...

Бинарные операции
Помогите решить задачу: Недавно Паша узнал, что во многих языках программирования есть бинарные...

Шифрование сессионного ключа
Всем доброе время суток. Есть задание, звучит так: 1) зашифровывает и расшифровывает произвольный...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru