Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
28032015
0 / 0 / 0
Регистрация: 23.03.2016
Сообщений: 3
1

Шифр Гронсфельда. Неверное смещение буквы

09.12.2016, 23:08. Просмотров 273. Ответов 2
Метки нет (Все метки)

Подскажите из за чего при шифровании данным методом может постоянно буква смещаться на 15 символов вперед от нужного?тоесть например "яд" с ключом 11 выдает не "ае" а "ос"
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static string GronsfeldEncipher(string toCode, string K)
        {
 
            string abc = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
 
            string result = "";
            for (int i = 0; i < toCode.Length; i++)
            {
                for (int j = 0; j < abc.Length; j++)
                {
                    if (toCode[i] == abc[j])
                    {
                        result += abc[(j + K[(i) % (K.Length)]) % (abc.Length)];
 
 
                    }
 
                }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2016, 23:08
Ответы с готовыми решениями:

Шифр Гронсфельда на C# получается не то что надо
Помогите с шифром Гронсфельда, сделал программу ,но она берет целый ключ, а не...

Шифр Гронсфельда
Составить программу на языке программирования Delphi, которая позволит...

Шифр Гронсфельда
Каждый символ сообщения сдвигается на k ключ того же алфавита....

Шифр Гронсфельда
Есть рабочий код метода Гронсфельда. Все идет отлично до первого пробела....

Шифр Гронсфельда
Нужно сделать так, чтобы если после шифрования код символа был больше 255(в...

2
OwenGlendower
Супер-модератор
Эксперт .NET
9335 / 8190 / 3495
Регистрация: 17.03.2014
Сообщений: 16,261
Записей в блоге: 1
09.12.2016, 23:47 2
28032015, потому что K это строка, следовательно выражение K[(i) % (K.Length)] возвращает символ, который далее приводится к int для сложения с j. Проблема в том что символ '1' имеет код 49, а не 1 как ты ожидаешь. Отсюда и получается это смещение. Нужно получить цифры из символов и работать с ними. Например так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static string GronsfeldEncipher(string toCode, string strKey)
{
    int[] key = strKey.Select(ch => ch - '0').ToArray(); 
    string abc = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
 
    string result = "";
    for (int i = 0; i < toCode.Length; i++)
    {
        for (int j = 0; j < abc.Length; j++)
        {
            if (toCode[i] == abc[j])
            {
                result += abc[(j + key[i % key.Length]) % abc.Length];
            }
        }
    }
    return result;
}
1
28032015
0 / 0 / 0
Регистрация: 23.03.2016
Сообщений: 3
11.12.2016, 18:09  [ТС] 3
спасибо!очень помогло
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2016, 18:09

Шифр Гронсфельда
Суть шифра Гронсфельда: Ключ шифра – пятизначное число. Буквы текста...

Шифр Гронсфельда
Такой вопрос. Почему функция Gronsfeld всегда возвращает значение 0 (&quot;\0&quot;)?...

Шифр Гронсфельда
Помогите пожалуйста отладить код) Program Gronsfeld; const nn=32; {число букв...


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

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

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