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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2014, 10:59   #1
temasey
 
Регистрация: 04.12.2014
Сообщений: 5
По умолчанию Взлом шифра Кардано

У меня шифр решетка Кардано без поворотов. Есть шифруемое слово(word), есть текст для шифрования(input). Слово шифруется правилом: ищется каждый символ слова word по первому вхождению(подчеркнул это верхним регистром) в input выдает на найденные буквы единицы, остальные ноли(так я получаю так называемый трафарет с вырезами). Это и есть ключ криптограммы из 0 и 1. Аналогично расшифровываю.
Как можно взломать данный шифр?
1) Для частотного анализа вроде как слишком мало букв для input;
2) Можно наверно как то пробивать по заранее созданному словарю все возможно составляемые слова, также по первому вхождению вырвать слова и смотреть на выходе осмысленный ли текст. Подскажите пожалуйста.

Код:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
 
namespace ConsoleApplication4
{
    class Program
    {
        public static string word = "приветбрат!";
        public static string input = "ПеРгамент клеопатры Из египта отраВлЕн Токсином, Будь остоРожен с ним, цезАрь, Такова твоя учесть!";
 
        static void Main(string[] args)
        {
            Console.WriteLine("Шифруемое слово: " + word + "\n");
            Console.WriteLine("Криптограмма     : " + input + "\n");
            input = input.Replace(' ', '_');
            input = input.ToLower();
            Matrix();
            Console.WriteLine("\nКриптограмма: " + input);
            Console.WriteLine("\nКлюч        : " + Crypt(word, input));
            string key = Crypt(word, input);
            Console.Write("\nДешифровка  : ");
            DeCrypt(input, key);
            Console.ReadLine();
        }
 
        public static void Matrix()
        {
            Console.WriteLine("Матрица:");
            int b = 0;
            int c = input.Length / word.Length;
            if (input.Length % word.Length != 0)
            {
                int d = input.Length % word.Length;
                c++;
                int f = word.Length - d;
                input = input.PadRight(input.Length + f);
            }
 
            char[,] Matrix = new char[word.Length, c];
            for (int j = 0; j < c; j++)
            {
                for (int i = 0; i < word.Length; i++)
                {
                    Matrix[i, j] = input[b];
                    Console.Write("{0} ", Matrix[i, j]);
                    b++;
                }
                Console.WriteLine();
            }
        }
 
        static string Crypt(string word, string input)
        {
            var sb = new StringBuilder();
            int i = 0, j = 0;
            for (; i < word.Length; i++)
            {
                for (; j < input.Length; j++)
                {
                    if (word[i] == input[j])
                    {
                        sb.Append("1");
                        j++;
                        break;
                    }
                    sb.Append("0");
                }
            }
            for (; j < input.Length; j++)
                sb.Append("0");
 
            return sb.ToString();
        }
 
        static void DeCrypt(string input, string key)
        {
            key = Crypt(word, input);
            for (int i = 0; i < key.Length; i++)
            {
                if (Convert.ToString(key[i]) == "1")
                {
                    Console.Write(input[i]);
                }
            }
        }
    }
}

Последний раз редактировалось temasey; 04.12.2014 в 11:04.
temasey вне форума Ответить с цитированием
Старый 04.12.2014, 14:22   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
У меня шифр решетка Кардано без поворотов.
Могу вас разочаровать, у вас его НЕТ.
Цитата:
Есть шифруемое слово(word), есть текст для шифрования(input).
Есть шифруемое слово и есть решетка (трафарет с вырезами).
Цитата:
Слово шифруется правилом: ищется каждый символ слова word по первому вхождению(подчеркнул это верхним регистром) в input выдает на найденные буквы единицы, остальные ноли(так я получаю так называемый трафарет с вырезами).
Трафарет ЗАДАН заранее. Знаки слова расставляются на заданные места (по трафарету). Остальное как удастся.

Это и есть криптограмма.

В вашем случае для успешной расшифровки передать необходимо и ключ (он же адресату неизвестен заранее) и криптограмму. В таком случае для злоумышленика нет проблем.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 04.12.2014 в 14:24.
evg_m вне форума Ответить с цитированием
Старый 04.12.2014, 17:13   #3
temasey
 
Регистрация: 04.12.2014
Сообщений: 5
По умолчанию

почему нет? я что то не так сделал?
temasey вне форума Ответить с цитированием
Старый 04.12.2014, 17:55   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

должно быть:
РЕШЕТКА(ключ) + слово = криптотекст

у вас же
слово + текст = решетка (и каждый раз новая)!!!!
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 04.12.2014, 18:14   #5
temasey
 
Регистрация: 04.12.2014
Сообщений: 5
По умолчанию

дак зашифровывая мы и должны получить ключ, чтобы потом по нему расшифровать разве не так?
Как же делается, пишется текст и в нем зашифровывется слово, каждая буква слова это прорезь в трафарете(в данном случае 1). Решетка у меня не каждый раз новая, а одна единственная, что за глупости
temasey вне форума Ответить с цитированием
Старый 05.12.2014, 09:21   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
Решетка у меня не каждый раз новая, а одна единственная, что за глупости
Цитата:
Слово шифруется правилом: ищется каждый символ слова word по первому вхождению(подчеркнул это верхним регистром) в input выдает на найденные буквы единицы, остальные ноли(так я получаю так называемый трафарет с вырезами)
Это называется постоянная?
при шифрованиии Вы подаете на вход исходное слово, криптотекст и получаете РЕШЕТКУ.
Цитата:
Код:
static string Crypt(string word /* слово*/, string input /*криптотекст*/)  /* =решетка! */ 
        {
P.S. Быть может это ошибка постановщика задачи.
Ваше правило сокрытия информации в корне неверно. почитайте wiki
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 05.12.2014 в 09:32.
evg_m вне форума Ответить с цитированием
Старый 05.12.2014, 17:51   #7
temasey
 
Регистрация: 04.12.2014
Сообщений: 5
По умолчанию


word=убитьпрайса
input=Приношу_извинения_за_свои_оши бки._Могу_ли_я_заслужить_прощение благодаря_своей_настойчивости_и_оба янию.
key1=000000100000000000000000000000 10000000000000000000011101100000000 00001000000000000001000000001000010 0000
вот такой ключ получается, я так это понял, объясните пожалуйста в чем моя ошибка, у меня конечно немного иначе, по первому вхождению ищет буквы, но думаю не суть
temasey вне форума Ответить с цитированием
Старый 08.12.2014, 12:43   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
вот такой ключ получается, я так это понял,
Ключ в принципе не может ПОЛУЧАТЬСЯ. Он ЗАДАН изначально.

Криптография основано на наличии НЕДОСТУПНОЙ для злоумышленника и ИЗВЕСТНОЙ адресату "секретной" информации. (КЛЮЧА).

Если он будет как вы говорите получаться, то адресату для расшифровки тоже нужно будет получить от отправителя ключ. Если он передается вместе с посланием, значит он одинаково доступен злоумышленнику как и само послание. Значит он(злоумышленник) может его расшифровать послание не прибегая к каким-либо ухищрениям, а только используя полученный вместе с посланием ключ.
Если ключ передается отдельно, есть ВЕРОЯТНОСТЬ не прочитать послание самим адресатом (послание с ключом перехватил и уничтожил злоумышленник).
Если есть несколько сообщений с РАЗНЫМИ ключами, то как узнать КАКИМ из полученных ключей их расшифровывать.

Если ключ создается и не передается то
КАК получатель будет расшифровывать(ключ же был сгенерирован и заранее был неизвестен)?
Также как и злоумышленник, путем анализа?
Тогда он потратит на это СТОЛЬКО же времени сколько и злоумышленник.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация шифра cast evklid Помощь студентам 0 31.05.2013 18:07
Взлом XOR-шифра Rad-X Помощь студентам 23 12.05.2013 20:25
Разгадка шифра saivs Общие вопросы Delphi 6 15.04.2013 18:28
формула кардано Александррррр1 Помощь студентам 0 31.03.2012 12:20