Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/34: Рейтинг темы: голосов - 34, средняя оценка - 4.85
2 / 2 / 5
Регистрация: 08.01.2012
Сообщений: 132

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

05.02.2012, 19:19. Показов 6647. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.02.2012, 19:19
Ответы с готовыми решениями:

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

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

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

8
 Аватар для Yukikaze
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
05.02.2012, 19:35
Делал немного по другому, но вот что получилось,
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
2 / 2 / 5
Регистрация: 08.01.2012
Сообщений: 132
05.02.2012, 19:51  [ТС]
интересное решение. Проект с коментами можете бросить? Поразбираюсь.
0
 Аватар для Yukikaze
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
05.02.2012, 20:12
Бери, вроде все понятно подписал
Вложения
Тип файла: zip char++.zip (41.3 Кб, 264 просмотров)
2
2 / 2 / 5
Регистрация: 08.01.2012
Сообщений: 132
05.02.2012, 20:22  [ТС]
Спасибо. Не совсем понял как реализован ключ?
0
 Аватар для Yukikaze
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
05.02.2012, 20:33
Цитата Сообщение от unijcoder Посмотреть сообщение
Спасибо. Не совсем понял как реализован ключ?
Ну на сколько я помню, ключ в шифре Цезаря это число позиций в алфавите на которое мы сдвигаем каждый символ строки, так получается, что:
C#
1
ch = (char)(ch + key);
ch - например символ 'а', его номер в таблице символов UTF-32 = 1 072
C#
1
ch = ch + 1 //ch = 1072 + 1 = 1073 = б
ну и так далее
1
2 / 2 / 5
Регистрация: 08.01.2012
Сообщений: 132
05.02.2012, 20:42  [ТС]
А. Это смещение. А еще есть понятие ключевого слова.

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

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


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

Добавлено через 21 час 40 минут
Уважаемые товарищи, может кто то доведет до логического конца проект?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.02.2012, 19:12
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru