Форум программистов  
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > .NET > Общие вопросы .NET
Регистрация

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

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

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

Пример:

Ключ: 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, 12:27   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 22,593
Репутация: 5062
По умолчанию

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

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

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

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

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

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

Код:

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, 17:33   #5
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 22,593
Репутация: 5062
По умолчанию

Цитата:
Сообщение от 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, 19:28   #6
manchester_alan
Форумчанин
 
Регистрация: 07.01.2015
Адрес: Мизур
Сообщений: 188
Репутация: 18
По умолчанию

Спасибо!)

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



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
криптография,шифрование Zaraaa Помощь студентам 0 03.05.2015 15: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




12:08.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru