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

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

05.02.2012, 19:19. Просмотров 4306. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2012, 19:19
Ответы с готовыми решениями:

Используя ключевое слово и шифр Виженера, закодируйте фразу
Используя ключевое слово glory и шифр Виженера, закодируйте фразу I would have any opportunity to...

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

Как сделать чтобы было возможность повторного выделения опции в select multiple?
В мультиплей селексе выбирает 1 и тотже элемент только 1 раз, как это исправить? Добавлено через...

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

8
Yukikaze
344 / 323 / 49
Регистрация: 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
344 / 323 / 49
Регистрация: 12.12.2011
Сообщений: 563
05.02.2012, 20:12 4
Бери, вроде все понятно подписал
2
Вложения
Тип файла: zip char++.zip (41.3 Кб, 215 просмотров)
unijcoder
0 / 0 / 5
Регистрация: 08.01.2012
Сообщений: 132
05.02.2012, 20:22  [ТС] 5
Спасибо. Не совсем понял как реализован ключ?
0
Yukikaze
344 / 323 / 49
Регистрация: 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
344 / 323 / 49
Регистрация: 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
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2012, 19:12

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

При наведении на кнопку открывать ещё 5 кнопок, но чтобы на них можно было нажимать
на картинки всё описано

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


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

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

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