Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/154: Рейтинг темы: голосов - 154, средняя оценка - 4.60
78 / 78 / 0
Регистрация: 11.06.2011
Сообщений: 335

Шифр Атбаш

04.09.2011, 22:04. Показов 31573. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Начался новый учебный год, не успел оправиться от сесси, как задали новую курсовую. Как бы то ни было учиться нужно, ну по крайней мере пытаться.
Задание выглядит примерно так: "Шифр простой замены, использованный для еврейского алфавита и
получивший оттуда свое название. Шифрование происходит заме-
ной первой буквы алфавита на последнюю, второй на предпос-
леднюю (алеф (первая буква) заменяется на тав (последнюю), бет(вторая) заменяется на шин (предпоследняя); из этих сочетани
шифр и получил свое название). Шифр Атбаш для английского
алфавита:
Исходный алфавит: 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
Алфавит замены: Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
Пользуясь изложенным способом:
А) зашифровать данный текст
Б) расшифровать данный текст".

Трудность заключается в способе замены букв. По идее это строка, нужно всего лишь ... и тут у меня закипает мозг.
Вот такая ситуация. У кого какие мысли по задаче, пишите, делитись.
P.S. И это все нужно оформить в forms, хотя это не такая уж проблема. Главное чтобы стало понятно как реализовать ход прог-ммы на деле, без всяких заморочек, как в Win32.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.09.2011, 22:04
Ответы с готовыми решениями:

Шифр Атбаш
Всем привет. Нужна помощь! Составить программу в Borland C++, которая позволит закодировать исходный текст шифром Атбаш и выполнить...

Шифрование методом Атбаш
Шифр Атбаш для русского алфавита на С++: Исходный алфавит: АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ Алфавит замены:...

Шифрование/дешифрование текста методом Атбаш
Моно-буквенный шифр замещения AtBash (еврейского происхождения) состоит в преобразовании буквы, лежащей в расстояние X от начала алфавита...

12
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
04.09.2011, 23:21
DINAzavR, вот в консольном набросал две функции.
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
#include <string.h>
#include <ctype.h>
// добавить можно кириллицу, да хоть немецкий.
#define  CODE_ATBASH       "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
#define  DECODE_ATBASH    "ZYXWVUTSRQPONMLKJIHGFEDCBA"
 
// функция кодирования
char* code_atbash(char* src) {
   char* dst = src;
   const char* cch, *dch;
 
   while( *src ) {
        if(isalpha(*src)) {
                  for(dch = DECODE_ATBASH, cch = CODE_ATBASH; *cch; *cch++, *dch++) {
                       if( *cch == toupper(*src) ) {
                            *src = (isupper(*src)) ?  *dch : tolower(*dch);
                             break;
                       }
                  }
         }
         *src++;
   }
   return dst;
}
 
// функция декодирования
char* decode_atbash(char* src) {
   char* dst = src;
   const char* cch, *dch;
 
   while( *src ) {
         if(isalpha(*src)) {
               for(dch = DECODE_ATBASH, cch = CODE_ATBASH; *cch; *cch++, *dch++) {
                    if( *dch == toupper(*src) ) {
                          *src = (isupper(*src)) ?  *cch : tolower(*cch);
                            break;
                     }
                }
         }
         *src++;
   }
   return dst;
}
 
 
int  main(void) {
    char str[64] = "ABCDEF adam";
 
    puts(str);    // исходная строка
    puts( code_atbash(str) );    // закодированная
    puts( decode_atbash(str) );   // декодированная
 
    putchar('\n');
 
    // ещё пример
    strcpy(str, "String(decode), WWW.SaMpLe.ORG");
    puts(str);    // исходная строка
    puts( code_atbash(str) );    // закодированная
    puts( decode_atbash(str) );   // декодированная
 
    getchar();
    return 0;
}
0
78 / 78 / 0
Регистрация: 11.06.2011
Сообщений: 335
05.09.2011, 09:16  [ТС]
Извините за дурацкий вопрос, но не могли бы Вы пояснить что это за операторы: isalpha, isupper, toupper, *src, *cch, *dch?
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
05.09.2011, 10:20
Цитата Сообщение от DINAzavR Посмотреть сообщение
isalpha
Является ли символ буквой в соответствии с текущей локалью.
Цитата Сообщение от DINAzavR Посмотреть сообщение
isupper
Является ли символ прописной (заглавной) буквой в соответствии с текущей локалью.
Цитата Сообщение от DINAzavR Посмотреть сообщение
toupper
Преобразовать букву в прописную (заглавную).
Цитата Сообщение от DINAzavR Посмотреть сообщение
*src, *cch, *dch
Разыменование указателя, я так полагаю.
0
05.09.2011, 15:32

Не по теме:

Цитата Сообщение от DINAzavR Посмотреть сообщение
как задали новую курсовую
да это максимум на лабораторную работу тянет

0
78 / 78 / 0
Регистрация: 11.06.2011
Сообщений: 335
05.09.2011, 15:59  [ТС]
Nameless One, так покажите класс и решите эту "лабораторную".
P.S. Задание может и не сомое сложное, но оформить придется по ГОСТам, как курсовую.
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
05.09.2011, 16:05
Цитата Сообщение от DINAzavR Посмотреть сообщение
так покажите класс и решите эту "лабораторную"
Так Вам уже написали решение.
Цитата Сообщение от DINAzavR Посмотреть сообщение
но оформить придется по ГОСТам, как курсовую.
Или оформить тоже за Вас надо?
0
78 / 78 / 0
Регистрация: 11.06.2011
Сообщений: 335
05.09.2011, 22:47  [ТС]
Уточню задание, нужно ввести и обработать текс.
Решение изучаю, разбираюсь целый день, но кроме новых функций ничего не понял.
Появились мысли как решать, запишу пока не забыл: необходимо разбить введенный текст на буквы, определить их порядковые номера в соответствии с алфавитном, а потом сопоставить с обратным. Как-то так, но я не представлю как это реализовать. Программисты, вся надежда на Вас.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
05.09.2011, 23:18
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
#include <stdio.h>
#include <string.h>
 
const char UPPER_DECODED[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const char UPPER_ENCODED[] = "ZYXWVUTSRQPONMLKJIHGFEDCBA";
const char LOWER_DECODED[] = "abcdefghijklmnopqrstuvwxyz";
const char LOWER_ENCODED[] = "zyxwvutsrqponmlkjihgfedcba";
 
char * encode(char * str){
    char * p, * f;
    
    for ( p = str; *p; ++p ){
        if ( f = strchr(UPPER_DECODED, *p) )
            *p = UPPER_ENCODED[f - UPPER_DECODED];
        else if ( f = strchr(LOWER_DECODED, *p) )
            *p = LOWER_ENCODED[f - LOWER_DECODED];
    }
    
    return str;
}
 
char * decode(char * str){
    char * p, * f;
    
    for ( p = str; *p; ++p ){
        if ( f = strchr(UPPER_ENCODED, *p) )
            *p = UPPER_DECODED[f - UPPER_ENCODED];
        else if ( f = strchr(LOWER_ENCODED, *p) )
            *p = LOWER_DECODED[f - LOWER_ENCODED];
    }
    
    return str;
}
 
int main(void){
    char buf[BUFSIZ];
    
    while ( printf("String:  ") && scanf("%[^\n]%*c", buf) == 1 ){
        printf("Encoded: %s\n", encode(buf));
        printf("Decoded: %s\n", decode(buf));
    }
    
    return 0;
}
2
71 / 76 / 9
Регистрация: 30.06.2011
Сообщений: 176
06.09.2011, 08:30
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 void code( const char* text, char* newtext)
{
  do {
     if ( *text > 64 && *text < 91) *newtext = 155 - *text;
     else if ( *text > 96 && *text < 123) *newtext = 219 - *text;
     else *newtext = *text;
  } while ( newtext++, *text++);
  *newtext =0;
}
 
int main() {
   setlocale( LC_ALL, "Rus");
   char s1[100], s2[100];
   std::cout << "Введите исходную строку: ";
   std::cin >> s1;
   code( s1, s2);
   std::cout << "Закодированная/раскодированная строка: " << s2 << std::endl;
   return 0;
}
2
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
06.09.2011, 10:14
По-моему такие курсовые человек сам должен делать. Изучать литературу, вникать, предлагать свои идеи, а то потом как он будет защищать кого-то (в плане защиты информации), если себя защитить не может...
1
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
06.09.2011, 17:28
Цитата Сообщение от xAtom Посмотреть сообщение
C++
1
// добавить можно кириллицу, да хоть немецкий.
Не получится, так как функции isalpha и другие из файла cctype работают только с символами
английского алфавита. Можно использовать одноименные функции из файла locale, где
вторым параметром задается локаль, но такой код будет непереносимым, так как стандарт
не обязывает компилятор иметь национальные локали.
Вот так можно сделать:
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/////////////////////////////////////////////////////////////////////////////////////////
//                       ШИФР АТБАШ
//Шифр простой замены, использованный для еврейского алфавита и
//получивший оттуда свое название. Шифрование происходит заме-
//ной первой буквы алфавита на последнюю, второй на предпос-
//леднюю (алеф (первая буква) заменяется на тав (последнюю), бет(вторая) заменяется на шин 
//(предпоследняя); из этих сочетани
//шифр и получил свое название). Шифр Атбаш для английского
//алфавита:
//Исходный алфавит: 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
//Алфавит замены:   Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
//Пользуясь изложенным способом:
//А) зашифровать данный текст
//Б) расшифровать данный текст.
/////////////////////////////////////////////////////////////////////////////////////////
// В данной программе можно шифровать атбашем одновременно по нескольким непересекающимся 
//алфавитам. В общем, на курсовую уже не тянет, как минимум на дипломную. 
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <ctime>
#include <cstdlib>
#include <iostream>
#include <iterator>
#include <set>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string       T_str;
typedef T_str::size_type  T_pos;
typedef std::set<T_str>   T_alphabets;
/////////////////////////////////////////////////////////////////////////////////////////
struct  T_get_atbash_symb
{
    const T_alphabets&  alphabets_;
    //-----------------------------------------------------------------------------------
    T_get_atbash_symb(const T_alphabets&  alphabets) : alphabets_(alphabets)
    {}
    //-----------------------------------------------------------------------------------
    char operator() (char  symb)
    {
        for(T_alphabets::const_iterator  alphabet_it = alphabets_.begin();
            alphabet_it != alphabets_.end(); ++alphabet_it)
        {
            T_pos  symb_pos = alphabet_it->find(symb);
            if(symb_pos != T_str::npos)
            {
                return (*alphabet_it)[alphabet_it->size() - symb_pos - 1];
            }
        }
        return  symb;    
    }
};
/////////////////////////////////////////////////////////////////////////////////////////
T_str  get_atbash_str
    (
        const T_str&        s,
        const T_alphabets&  alphabets
    )
{
    T_str  res_str;
    std::transform
        (
            s.begin(),
            s.end(),
            std::back_inserter(res_str),
            T_get_atbash_symb(alphabets)
        );
    return  res_str;
}
/////////////////////////////////////////////////////////////////////////////////////////
struct  T_gen_rand_simb_from
{    
    T_str  str_for_gen_;
    //-----------------------------------------------------------------------------------
    T_gen_rand_simb_from(const T_alphabets&  alphabets)
    {
        for(T_alphabets::const_iterator  alphabet_it = alphabets.begin();
            alphabet_it != alphabets.end(); ++alphabet_it)
        {
            str_for_gen_ += *alphabet_it;
        }
    }
    //-----------------------------------------------------------------------------------
    char operator() ()
    {
        return  str_for_gen_[rand() % str_for_gen_.size()];
    }
};
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    srand( unsigned( time(0) ) );
 
    T_alphabets  alphabets;
    alphabets.insert("abcdefghijklmnopqrstuvwxyz");
    alphabets.insert("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
    alphabets.insert("абвгдеёжзийклмнопрстуфхцчшщъыьэюя");
    alphabets.insert("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ");
    alphabets.insert("0123456789");        
    alphabets.insert("+*#([.,])№/-");    
 
    const int  S_LEN = 50;
    T_str      s;
    std::generate_n
        (
            std::back_inserter(s),
            S_LEN,
            T_gen_rand_simb_from(alphabets)          
        );
 
    std::cout << "Initial line:"
              << std::endl
              << s
              << std::endl;
    
    std::cout << std::endl
              << "The encrypted line:"
              << std::endl
              << get_atbash_str(s, alphabets)
              << std::endl;
 
    std::cout << std::endl
              << "The decrypted encrypted line:"
              << std::endl
              << get_atbash_str
                     (
                         get_atbash_str(s, alphabets), 
                         alphabets
                     )
              << std::endl;
}
1
3 / 3 / 0
Регистрация: 12.12.2018
Сообщений: 69
10.04.2019, 12:30
Кто может объяснить пятую и шестую строки данного кода?

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 void code( const char* text, char* newtext)
{
  do {
     if ( *text > 64 && *text < 91) *newtext = 155 - *text;
     else if ( *text > 96 && *text < 123) *newtext = 219 - *text;
     else *newtext = *text;
  } while ( newtext++, *text++);
  *newtext =0;
}
 
int main() {
   setlocale( LC_ALL, "Rus");
   char s1[100], s2[100];
   std::cout << "Введите исходную строку: ";
   std::cin >> s1;
   code( s1, s2);
   std::cout << "Закодированная/раскодированная строка: " << s2 << std::endl;
   return 0;
}
ОбЪясните пятую и шестую строку данного кода? Чет не врубаюсь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.04.2019, 12:30
Помогаю со студенческими работами здесь

Шифр Виженера, шифр Скитала
Я много прочитал информации и захотел реализовать эти шифры на Buider C++, а вот как это сделать. Кому интересно, напишите мне примеры этих...

Составить программу шифрования и расшифровки в Delphi по соответствующему заданию: шифр Атбаш + шифр Цезеря
Составить программу шифрования и расшифровки в Delphi по соответствующему заданию: шифр Атбаш + шифр Цезеря (одновременно использовать два...

Шифр атбаш
Нужен код для шифровки/дешифровки текста с помощью атбаш

Шифр Атбаш
Подскажите. Как привязать работу с только русской раскладкой, и ни с чем более. Исходный текст: АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ ...

Шифр атбаш
Помогите сделать программу,чтобы было шифрование методом атбаш. Алфавит можно было задать массивом. Сам алфавит &quot;abcdefg789&quot;


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru