Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2017, 22:44   #1
manchester_alan
Форумчанин
 
Регистрация: 07.01.2015
Сообщений: 231
По умолчанию Шифрование(криптография)

Как реализовать шифрование(алгоритм - трафарет Ришелье)?

Пример:

Ключ: 2741635; 15243; 671852493; 07;28615;943;...
Открытый текст:
LETTER SENT TO THE EMPEROR GIVING FULL DETAIL
Ключ:
(2741635) (15243) (671852493) (07) (28615)(943)(2741635)
Шифртекст:
TLRTSEE ETOTN EPOEMTHER NI LUGIG VFR TLIE SAD
manchester_alan вне форума Ответить с цитированием
Старый 08.09.2017, 11:27   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от manchester_alan Посмотреть сообщение
шифрование(алгоритм - трафарет Ришелье)
а что это за алгоритм? гугл подсказывает, что Ришелье использовал решётку Кардано

но тогда непонятно, что это за ключ и как он в данном случае используется.

или у Вас нет алгоритма и ваш вопрос как раз в этом и состоит, чтобы Вам нашли и расписали алгоритм?
Если есть алгоритм, тогда давайте его, подумаем, как его реализовать. (Кстати, на каком языке нужна программа?)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.09.2017, 18:15   #3
manchester_alan
Форумчанин
 
Регистрация: 07.01.2015
Сообщений: 231
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а что это за алгоритм? гугл подсказывает, что Ришелье использовал решётку Кардано

но тогда непонятно, что это за ключ и как он в данном случае используется.

или у Вас нет алгоритма и ваш вопрос как раз в этом и состоит, чтобы Вам нашли и расписали алгоритм?
Если есть алгоритм, тогда давайте его, подумаем, как его реализовать. (Кстати, на каком языке нужна программа?)
Алгоритма как такового нет, просто дано задание: реализация трафарета Ришелье.. Да уж, в гугле сам только на решетку Кардано натыкался, видимо они очень похожи..
Вообще программа на c#, но это не так важно, переведу, если что, просто сам алгоритм реализации этого шифра очень пригодился бы...
manchester_alan вне форума Ответить с цитированием
Старый 10.09.2017, 17:47   #4
manchester_alan
Форумчанин
 
Регистрация: 07.01.2015
Сообщений: 231
По умолчанию

Код:
static IEnumerable<string> Swap(string text, string key)
        {
            var letters = text.Replace(" ", "").ToCharArray();
            var swaps = key.Split(new char[] { '(', ')' }, StringSplitOptions.RemoveEmptyEntries);
            int curPos = 0;
            for(int i = 0; i < swaps.Length; i++)
            {
                var Encrypted = letters.Skip(curPos).Take(swaps[i].Length).ToArray()
                    .Zip(swaps[i],(a,b) => new { letter = a, index = b})
                    .OrderBy(x=>x.index).Select(x=>x.letter).ToArray();
                curPos += swaps[i].Length;
                yield return new string(Encrypted);
            }
        }
        static void Main(string[] args)
        {
            var text = "шифр ришелье";
            var key = "(231)(4132)(3142)";
            Console.WriteLine(string.Join(" ",Swap(text,key)));
        }
Вот мне помогли разобраться с алгоритмом, но я не могу понять, как реализовать обратную расшифровку шифра Ришелье по зашифрованному тексту и ключу...
manchester_alan вне форума Ответить с цитированием
Старый 11.09.2017, 16:33   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от manchester_alan Посмотреть сообщение
как реализовать обратную расшифровку шифра Ришелье по зашифрованному тексту и ключу...
ну, попробуйте так:

Код:
	static IEnumerable<string> Swap(string text, string key, bool decode = false)
        {
            var letters = text.Replace(" ", "").ToCharArray();
            var swaps = key.Split(new char[] { '(', ')' }, StringSplitOptions.RemoveEmptyEntries);
            int curPos = 0;
            for(int i = 0; i < swaps.Length; i++)
            {
            	string curKeyItem=swaps[i];
            	if(decode){
            		var DecryptedKey = "123456789".Take(curKeyItem.Length).ToArray()
                    	.Zip(curKeyItem,(a,b) => new { letter = a, index = b})
	                    .OrderBy(x=>x.index).Select(x=>x.letter).ToArray();
            		curKeyItem=new string(DecryptedKey);
            	}
            	
                var Encrypted = letters.Skip(curPos).Take(curKeyItem.Length).ToArray()
                    .Zip(curKeyItem,(a,b) => new { letter = a, index = b})
                    .OrderBy(x=>x.index).Select(x=>x.letter).ToArray();
                curPos += swaps[i].Length;
                yield return new string(Encrypted);
            }
        } // OrderByDescending
замечания по коду
1) вызывать для шифрования:
Код:
var crypttext=string.Join(" ",Swap(text,key));
для дешифрования вызывать
Код:
var decrypttext=string.Join(" ",Swap(crypttext,key,true));
2) так мощно использовать LINQ, как это сделал автор исходного кода я не умел и не умею. Поэтому не исключаю, что можно написать алгоритм короче и эффективней.

3) алгоритм теряет исходные пробелы, поэтому, после дешифровки пробелы остаются так же, как они стоят в зашифрованном тексте. Исходные пробелы восстановить невозможно.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.09.2017, 18:28   #6
manchester_alan
Форумчанин
 
Регистрация: 07.01.2015
Сообщений: 231
По умолчанию

Спасибо!)

Последний раз редактировалось Alex11223; 11.09.2017 в 18:35.
manchester_alan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
криптография,шифрование Zaraaa Помощь студентам 0 03.05.2015 14:30
Криптография PANDA8 Фриланс 12 14.06.2013 15:43
Криптография a.n.o.n.i.m Фриланс 0 20.04.2013 14:16
Криптография Vladokkk Помощь студентам 1 05.09.2012 05:20
криптография Kukurudza Общие вопросы C/C++ 1 11.09.2011 11:32