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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.96
adds
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 14
07.09.2011, 14:57     Помогите с Шифром Цезаря #1
Вообщем народ! Необходимо чтоб на вход поступала зашифрованная строка на латинице и далее выдавались все варианты перебора...
Не могу понять как реализовать сдвиг, помогите...


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;  
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2011, 14:57     Помогите с Шифром Цезаря
Посмотрите здесь:

Шифр Цезаря C++
Помогите реализовать шифр цезаря C++
C++ Шифр Цезаря
Проблемы с Аффинным шифром C++
C++ Шифр Цезаря C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ивашка
Заводчанин.
 Аватар для ивашка
1705 / 410 / 26
Регистрация: 31.08.2010
Сообщений: 2,301
07.09.2011, 15:28     Помогите с Шифром Цезаря #2
Сам не в курсе как и что,но есть готовая програмка,мб её "расковырять" можно,и посмотреть ...
Вложения
Тип файла: rar шифрЦезаря.rar (248.8 Кб, 275 просмотров)
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;
    }
}
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;
    }
}
есть попроще что нибудь?
а то это не понятно
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
07.09.2011, 16:50     Помогите с Шифром Цезаря #5
Цитата Сообщение от adds Посмотреть сообщение
а то это не понятно
Что именно ?
talis
 Аватар для talis
789 / 541 / 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;
}
adds
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 14
07.09.2011, 17:31  [ТС]     Помогите с Шифром Цезаря #7
Да дешифратор, самый простой без лютых функций и тд
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
07.09.2011, 17:33     Помогите с Шифром Цезаря #8
adds, если вы не хотите вызывать чужие лютые функции, вам придётся написать свои. Чудес не бывает.

Добавлено через 1 минуту
Если функция непонятна - ищите по ней информацию в интернете. Тут, например.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
07.09.2011, 17:45     Помогите с Шифром Цезаря #9
Цитата Сообщение от talis Посмотреть сообщение
дешифратор
Чем вас мой код не устраивает? Ведь шифр Цезаря, шифруется и дешифруется одним алгоритмом.
Миниатюры
Помогите с Шифром Цезаря  
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
07.09.2011, 17:46     Помогите с Шифром Цезаря #10
Net_Wanderer, ничем. Это ТС возмущался
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;
}
Можешь комментарии написать , чтоб ход мысли понять...
talis
 Аватар для talis
789 / 541 / 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;
}
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.09.2011, 18:00     Помогите с Шифром Цезаря #13
talis, а где взлом то? это перебор вариантов. Представьте ситуацию: вы знаете алфавит A (кольцо вычетов), мощность алфавита A, априорное распределение вероятностей на множестве A и все. То есть представьте, что вам язык не знаком, а надо как-то взломать. Есть хорошие методы взлома в этом случае, позволяющие чуть ли не exe-шники взламывать, если они зашифрованы этим шифром.

Добавлено через 2 минуты
А, извиняюсь, adds это и надо было, задание не прочитал
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
07.09.2011, 18:58     Помогите с Шифром Цезаря #14
Цитата Сообщение от Thinker Посмотреть сообщение
То есть представьте, что вам язык не знаком, а надо как-то взломать. Есть хорошие методы взлома в этом случае, позволяющие чуть ли не exe-шники взламывать, если они зашифрованы этим шифром.
Thinker, а можно с этого места поподробнее? Что можно прочитать про современные методы шифрования/дешифрования? А то, цезарь, перестановки, xor'ы - это всё как-то скучновато.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2011, 19:20     Помогите с Шифром Цезаря
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.09.2011, 19:20     Помогите с Шифром Цезаря #15
Цитата Сообщение от talis Посмотреть сообщение
Thinker, а можно с этого места поподробнее? Что можно прочитать про современные методы шифрования/дешифрования? А то, цезарь, перестановки, xor'ы - это всё как-то скучновато.
Конечно, можно, вот
http://www.cyberforum.ru/showthread.php?p=1950320
Yandex
Объявления
07.09.2011, 19:20     Помогите с Шифром Цезаря
Ответ Создать тему
Опции темы

Текущее время: 04:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru