Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
unijcoder
0 / 0 / 5
Регистрация: 08.01.2012
Сообщений: 132
1

Шифр Цезаря: чтобы было еще ключевое слово и возможность дешифрования

05.02.2012, 19:19. Просмотров 3462. Ответов 8
Метки нет (Все метки)

Здравствуйте уважаемые.

Написал прогу реализующую шифр Цезаря со смешением. Все работает.

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

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace cezar
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = 1, key = 1;
            //количество сдвигов
 
            Console.WriteLine("Введите слово,которое нужно зашифровать:");
            string s = Console.ReadLine();//храню слово, которое будем шифровать
 
            Console.WriteLine("Введите ключ:");
            key = Convert.ToInt32(Console.ReadLine());
 
            string s1 = "";//храню результат шифрования
 
            //string alf = "abcdefghijklmnopqrstuvwxyz";//работаю с английским алфавитом
            string alfphabet = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";//работаю с русским алфавитом
 
            int m = alfphabet.Length; //количество знаков в алфавите
 
            for (int i = 0; i < s.Length; i++)//цикл перебора букв шифруемого слова
            {
                for (int j = 0; j < alfphabet.Length; j++)//цикл сравнения каждой бкувы с алфавитом
                {
                    if (s[i] == alfphabet[j]) // в случае совпадения создаем темп, где храню номер буквы со сдвигом
                    {
                        int temp = j * n + key;//номер буквы+сдвиг в темп
 
                        while (temp >= m)//чтобы темп не уходил за рамки алфавита
                            temp -= m;
 
                        s1 = s1 + alfphabet[temp];//заношу зашифрованную букву в переменную для ее хранения
                    }
                }
 
            }
 
            Console.WriteLine("Зашифрованное слово:" + s1);
            Console.ReadLine();
        }
    }
}
Добавлено через 7 часов 3 минуты
Ну хоть кто нибудь...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2012, 19:19
Ответы с готовыми решениями:

Шифр Цезаря: Как сделать сортировку в шифре, чтобы дешифратор выдал единственно верное решение
Люди, как сделать сортировку в шифре, чтобы дешифратор выдал единственно верное решение Нужно как...

Разместить еще одну кнопку button2 чтобы она было ровно кнопкой Button1
Здравствуйте! Я создал одну кнопку Button1 в jFrame разместил сверху окна. Вот код: but...

Написание программы шифрования и дешифрования данных шифром Цезаря
Написать код Цезаря для шифрования и дешифрования данных.(В коде Цезаря задан цифровой ключ и этот...

Создать приложение шифрования и дешифрования текста шифром Цезаря
Сделать приложение шифрования и дешифрования текста. Пользователь вводит фразу, выводится в...

Как правильнее записать код.Так чтобы его еще можно было вставить в Word?
Здесь сначала пишется интеграл потом первообразная потом вычисленное и округленное значение. ...

8
Yukikaze
341 / 320 / 48
Регистрация: 12.12.2011
Сообщений: 563
05.02.2012, 19:35 2
Делал немного по другому, но вот что получилось,
Caesar(string слово, int ключ)
Decode(string шифр, int ключ)
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
string Caesar(string word, int key)
        {
            word = word.ToLower();
            StringBuilder sb = new StringBuilder();
            foreach (char character in word)
            {
                char ch = character;
                ch = (char)((int)ch + key);
                if (ch >= 'я')
                    ch = (char)(ch - 32);
                sb.Append(ch.ToString().ToLower());
            }
            return sb.ToString();
        }
 
        string Decode(string word, int key)
        {
            word = word.ToLower();
            StringBuilder sb = new StringBuilder();
            foreach (char character in word)
            {
                char ch = character;
                ch = (char)((int)ch - key);
                if (ch >= 'я')
                    ch = (char)(ch + 32);
                sb.Append(ch.ToString().ToLower());
            }
            return sb.ToString();
        }
2
unijcoder
0 / 0 / 5
Регистрация: 08.01.2012
Сообщений: 132
05.02.2012, 19:51  [ТС] 3
интересное решение. Проект с коментами можете бросить? Поразбираюсь.
0
Yukikaze
341 / 320 / 48
Регистрация: 12.12.2011
Сообщений: 563
05.02.2012, 20:12 4
Бери, вроде все понятно подписал
2
Вложения
Тип файла: zip char++.zip (41.3 Кб, 205 просмотров)
unijcoder
0 / 0 / 5
Регистрация: 08.01.2012
Сообщений: 132
05.02.2012, 20:22  [ТС] 5
Спасибо. Не совсем понял как реализован ключ?
0
Yukikaze
341 / 320 / 48
Регистрация: 12.12.2011
Сообщений: 563
05.02.2012, 20:33 6
Цитата Сообщение от unijcoder Посмотреть сообщение
Спасибо. Не совсем понял как реализован ключ?
Ну на сколько я помню, ключ в шифре Цезаря это число позиций в алфавите на которое мы сдвигаем каждый символ строки, так получается, что:
C#
1
ch = (char)(ch + key);
ch - например символ 'а', его номер в таблице символов UTF-32 = 1 072
C#
1
ch = ch + 1 //ch = 1072 + 1 = 1073 = б
ну и так далее
1
unijcoder
0 / 0 / 5
Регистрация: 08.01.2012
Сообщений: 132
05.02.2012, 20:42  [ТС] 7
А. Это смещение. А еще есть понятие ключевого слова.

Шифр Цезаря с ключевым словом
В данной разновидности шифра Цезаря ключ задается числом k (0<=k<=n-1) и коротким ключевым словом или предложением. Выписывается алфавит, а под ним, начиная с k-й позиции, ключевое слово. Оставшиеся буквы записываются в алфавитном порядке после ключевого слова. В итоге мы получаем подстановку для каждой буквы.
0
Yukikaze
341 / 320 / 48
Регистрация: 12.12.2011
Сообщений: 563
05.02.2012, 21:25 8
unijcoder, извини ошибся в термине, тебя запутал, да и сам не до понял

Добавлено через 11 минут
А это случайно не шифр Виженера? Потому, что в шифре Цезаря по сути не было ключевого слова
0
unijcoder
0 / 0 / 5
Регистрация: 08.01.2012
Сообщений: 132
06.02.2012, 19:12  [ТС] 9
Не. Точно Цезаря с ключевым словом. Хотя Виженера не знаю. Может они похожи?


Есть мысли как твой или мой код переделать?

Добавлено через 21 час 40 минут
Уважаемые товарищи, может кто то доведет до логического конца проект?
0
06.02.2012, 19:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2012, 19:12

Помогите выбрать видеокарту с 512 мб памяти и еще 2 ГБ оперативки, чтобы было 4000 руб. в сумме.
Планирую купить видеокарту с 512 мб памяти и еще 2 ГБ оперативки, чтобы было 4 в сумме. Подскажите...

Что нужно сделать, чтобы данную функцию можно было вызвать еще раз, не меняя ее код
Функцию add() из фрагмента кода вызвали 10 раз. Что нужно сделать, чтобы эту функцию можно было...

Шифр Цезаря и шифр Виженера
1. Используя шифр Цезаря расшифруйте слово ЛГПЗРГ. Шифр Цезаря для русского алфавита со сдвигом на...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru