Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.96
adds
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 14
#1

Помогите с Шифром Цезаря - C++

07.09.2011, 14:57. Просмотров 3295. Ответов 14
Метки нет (Все метки)

Вообщем народ! Необходимо чтоб на вход поступала зашифрованная строка на латинице и далее выдавались все варианты перебора...
Не могу понять как реализовать сдвиг, помогите...


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
#include <iostream.h>
#include <conio.h>
int main(){
    int shift=0;
    char alf[]={'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
    'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
    char input[100]={0};
    cout<<"Input anything: "<<endl;
    cin>>input;
    for(int i=0;i<strlen(input);i++){
     
     
     for(int j=0;j<26;j++){
            if(input[i]==alf[j]){
            
            while (j >= 26) j -= 26;// это если  значение вышло за диапазон
            while (j < 0) j += 26;// то мы корректируем его
            cout<<input<<endl;
        }
        }   
    } 
    getch();
    return 0;  
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2011, 14:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помогите с Шифром Цезаря (C++):

Помогите реализовать шифр цезаря - C++
Помогите написать графическую программу, которая шифрует слова шифром Цезаря.Шифр Цезаря — один из древнейших шифров. При шифровании...

Проблемы с Аффинным шифром - C++
Всем привет! У меня возникли проблемы при реализации программы, которая должна брать исходный текстовый файл и шифровать/дешифровать его...

Шифрование файлов шифром Вернама - C++
Всем здравствуйте.Нужно написать программу для шифрования файлов шифром Вернама.В качестве ключа программа должна хавать строку,сама...

Программа для шифрования английского текста шифром ROT13 - C++
Доброго времени суток, формучане! Очень нужна ваша помощь, не могу понять, как написать программу для шифрования текста шифром ROT13. В С++...

Сведения о книгах в библиотеке, получить информацию о книге с заданным шифром - C++
(На С++) Сведения о книгах в библиотеке. Структура записи: шифр книги, автор, название, год издания, местоположение (номер стеллажа,...

Пользуясь шифром Полибия зашифровать, а потом расшифровать текст введённый пользователем - C++
Смысл задания в том, чтобы пользуясь шифром Полибия зашифровать, а потом расшифровать текст введённый пользователем. Вот написал цикл, а...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ивашка
Заводчанин.
1707 / 413 / 26
Регистрация: 31.08.2010
Сообщений: 2,302
07.09.2011, 15:28 #2
Сам не в курсе как и что,но есть готовая програмка,мб её "расковырять" можно,и посмотреть ...
0
Вложения
Тип файла: rar шифрЦезаря.rar (248.8 Кб, 282 просмотров)
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
07.09.2011, 15:29 #3
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
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
void caesar_encrypt(char s[], int shift);
 
int main()
{
    char s[] = "Sweet dreams";
    int i;
 
    printf("source:    %s\n", s);
    caesar_encrypt(s, rand() % 27);
    printf("encrypted: %s\n", s);
 
    printf("\t---\t\n");
    for (i = 0; i < 26; i++) {
        caesar_encrypt(s, 1);
        printf("%s\n", s);
    }
    return 0;
}
 
void caesar_encrypt(char s[], int shift)
{
    int i, res;
 
    for (i = 0; s[i] != '\0'; i++) {
        if (!isalpha(s[i]))
            continue;
 
        res = tolower(s[i]) + shift;
        if (res > 'z')
            res -= 'z' - 'a' + 1;
        else if (res < 'a')
            res += 'z' - 'a' + 1;
 
        s[i] = isupper(s[i]) ? res - ('a'-'A') : res;
    }
}
0
adds
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 14
07.09.2011, 15:57  [ТС] #4
Цитата Сообщение от Net_Wanderer Посмотреть сообщение
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
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
void caesar_encrypt(char s[], int shift);
 
int main()
{
    char s[] = "Sweet dreams";
    int i;
 
    printf("source:    %s\n", s);
    caesar_encrypt(s, rand() % 27);
    printf("encrypted: %s\n", s);
 
    printf("\t---\t\n");
    for (i = 0; i < 26; i++) {
        caesar_encrypt(s, 1);
        printf("%s\n", s);
    }
    return 0;
}
 
void caesar_encrypt(char s[], int shift)
{
    int i, res;
 
    for (i = 0; s[i] != '\0'; i++) {
        if (!isalpha(s[i]))
            continue;
 
        res = tolower(s[i]) + shift;
        if (res > 'z')
            res -= 'z' - 'a' + 1;
        else if (res < 'a')
            res += 'z' - 'a' + 1;
 
        s[i] = isupper(s[i]) ? res - ('a'-'A') : res;
    }
}
есть попроще что нибудь?
а то это не понятно
0
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
07.09.2011, 16:50 #5
Цитата Сообщение от adds Посмотреть сообщение
а то это не понятно
Что именно ?
0
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
07.09.2011, 17:15 #6
Цитата Сообщение от adds Посмотреть сообщение
Необходимо чтоб на вход поступала зашифрованная строка на латинице и далее выдавались все варианты перебора...
Вы хотите сделать дешифратор?

Добавлено через 19 минут
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
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    #define BUFF_SIZE 256
    char str[ BUFF_SIZE ];
    int key;
 
    fputs( "Please enter an encrypted string:\n>", stdout );
    fgets( str, BUFF_SIZE, stdin );
 
    for( key = 0; key < 26; key++ )
    {
        printf( "[%2i]: ", key );
 
        char * ptr = &str[0];
 
        while( *(ptr + 1) != 0 )
        {
            if( isupper( *ptr ) )
               putchar( (*ptr + key > 'Z') ? *ptr + key - 26 : *ptr + key );
            else if( islower( *ptr ) )
               putchar( (*ptr + key > 'z') ? *ptr + key - 26 : *ptr + key );
            else
               putchar( *ptr );
 
            ptr++;
        }
        putchar( '\n' );
    }
 
    return 0;
}
0
adds
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 14
07.09.2011, 17:31  [ТС] #7
Да дешифратор, самый простой без лютых функций и тд
0
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
07.09.2011, 17:33 #8
adds, если вы не хотите вызывать чужие лютые функции, вам придётся написать свои. Чудес не бывает.

Добавлено через 1 минуту
Если функция непонятна - ищите по ней информацию в интернете. Тут, например.
0
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
07.09.2011, 17:45 #9
Цитата Сообщение от talis Посмотреть сообщение
дешифратор
Чем вас мой код не устраивает? Ведь шифр Цезаря, шифруется и дешифруется одним алгоритмом.
0
Миниатюры
Помогите с Шифром Цезаря  
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
07.09.2011, 17:46 #10
Net_Wanderer, ничем. Это ТС возмущался
1
adds
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 14
07.09.2011, 17:47  [ТС] #11
Цитата Сообщение от talis Посмотреть сообщение
Вы хотите сделать дешифратор?

Добавлено через 19 минут
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
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    #define BUFF_SIZE 256
    char str[ BUFF_SIZE ];
    int key;
 
    fputs( "Please enter an encrypted string:\n>", stdout );
    fgets( str, BUFF_SIZE, stdin );
 
    for( key = 0; key < 26; key++ )
    {
        printf( "[%2i]: ", key );
 
        char * ptr = &str[0];
 
        while( *(ptr + 1) != 0 )
        {
            if( isupper( *ptr ) )
               putchar( (*ptr + key > 'Z') ? *ptr + key - 26 : *ptr + key );
            else if( islower( *ptr ) )
               putchar( (*ptr + key > 'z') ? *ptr + key - 26 : *ptr + key );
            else
               putchar( *ptr );
 
            ptr++;
        }
        putchar( '\n' );
    }
 
    return 0;
}
Можешь комментарии написать , чтоб ход мысли понять...
0
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
07.09.2011, 17:50 #12
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
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    #define BUFF_SIZE 256
    char str[ BUFF_SIZE ];
    int key;
 
    fputs( "Please enter an encrypted string:\n>", stdout );
    fgets( str, BUFF_SIZE, stdin );
 
    for( key = 0; key < 26; key++ ) // key - счётчик сдвига
    {
        printf( "[%2i]: ", key ); // вывод текущего сдвига
 
        char * ptr = &str[0]; // указатель на текущий символ в строке
 
        while( *(ptr + 1) != 0 ) // пока не достигли нуль-терминатора в строке
        {
            if( isupper( *ptr ) ) // если *ptr - буква в верхнем регистре
               putchar( (*ptr + key > 'Z') ? *ptr + key - 26 : *ptr + key ); // *ptr с учётом сдвига.
                                                                             // если вылезли за 'Z'
                                                                             // отматываем на 26 символов назад
            else if( islower( *ptr ) ) // если *ptr - буква в нижнем регисте
               putchar( (*ptr + key > 'z') ? *ptr + key - 26 : *ptr + key ); // *ptr с учётом сдвига.
                                                                             // если вылезли за 'z'
                                                                             // отматываем на 26 символов назад
            else // любой другой символ
               putchar( *ptr ); // так и пишем
 
            ptr++; // переходим к следущему символу
        }
        putchar( '\n' );
    }
 
    return 0;
}
1
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.09.2011, 18:00 #13
talis, а где взлом то? это перебор вариантов. Представьте ситуацию: вы знаете алфавит A (кольцо вычетов), мощность алфавита A, априорное распределение вероятностей на множестве A и все. То есть представьте, что вам язык не знаком, а надо как-то взломать. Есть хорошие методы взлома в этом случае, позволяющие чуть ли не exe-шники взламывать, если они зашифрованы этим шифром.

Добавлено через 2 минуты
А, извиняюсь, adds это и надо было, задание не прочитал
0
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
07.09.2011, 18:58 #14
Цитата Сообщение от Thinker Посмотреть сообщение
То есть представьте, что вам язык не знаком, а надо как-то взломать. Есть хорошие методы взлома в этом случае, позволяющие чуть ли не exe-шники взламывать, если они зашифрованы этим шифром.
Thinker, а можно с этого места поподробнее? Что можно прочитать про современные методы шифрования/дешифрования? А то, цезарь, перестановки, xor'ы - это всё как-то скучновато.
0
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.09.2011, 19:20 #15
Цитата Сообщение от talis Посмотреть сообщение
Thinker, а можно с этого места поподробнее? Что можно прочитать про современные методы шифрования/дешифрования? А то, цезарь, перестановки, xor'ы - это всё как-то скучновато.
Конечно, можно, вот
http://www.cyberforum.ru/showthread.php?p=1950320
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2011, 19:20
Привет! Вот еще темы с ответами:

Шифрование Цезаря - C++
Подскажите ребят, есть текст уже в текстовике, его нужно зашифровать. #include &lt;iostream&gt; using namespace std; int main() { ...

Шифр Цезаря - C++
text - исходный code - закодированный decode - дешифрованный после компиляции в файл code в конец ложится пробел, откуда он...

дешифратор цезаря - C++
#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;string.h&gt; #include&lt;math.h&gt; #include&lt;string.h&gt; #include&lt;conio.h&gt; #include&lt;ctype.h&gt;...

Шифр Цезаря - C++
Добрый вечер, не могу реализовать шифр цезаря на C builder, программа компилится нормально, но при нажатии на кнопку выдаёт ошибку. Вот код...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.09.2011, 19:20
Ответ Создать тему
Опции темы

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