Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
Vitali
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 4
1

Реализация шифра Бэкона

05.05.2014, 22:11. Просмотров 1249. Ответов 9
Метки нет (Все метки)

Помогите, пожалуйста реализовать шифр Бэкона. С шифром я разобрался, но запрограммировать пока не получается. Примерно, это должно выглядеть так : в одну строку вводим текст, а во второй он сразу же шифруется. При нажатии кнопки, действия меняются местами, то есть, соответственно в первую строку вводим шифр, во второй получаем текст.
0
Миниатюры
Реализация шифра Бэкона  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2014, 22:11
Ответы с готовыми решениями:

Реализация шифра Цезаря
#include <vcl.h> #pragma hdrstop #include <math.h> #include "Unit1.h"...

Реализация шифра "Атбаш"
пытаюсь написать программу для реализации Атбаша по логике и по самой формуле Атбаша, получается...

Реализация шифра Цезаря
Напишите функцию encryptCaesar(msg, shift), которая кодирует сообщение шифром Цезаря. Шифр Цезаря...

Реализация шифра перестановки
надо сгенерировать ключ рандомно, чтобы количество цифры совпадало с буквами по очереди и не...

Реализация шифра гаммирования
Помогите разобраться) Нужно написать реализацию шифра гаммирования. Как я это себе представляю:...

9
prog63
2 / 2 / 1
Регистрация: 24.11.2013
Сообщений: 77
05.05.2014, 22:22 2
Цитата Сообщение от Vitali Посмотреть сообщение
он сразу же шифруется
процедуру шифрования пишете в обработчик EditChange компонента Edit.
Он будет вызван при любом изменении в поле
0
Vitali
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 4
05.05.2014, 22:56  [ТС] 3
Спасибо, это понятно. Но я с самим кодом разобраться не могу, если можете, помогите, пожалуйста. У меня есть код на Паскале, но я там ни бум-бум
0
gunslinger
случайный прохожий
1379 / 885 / 344
Регистрация: 20.07.2013
Сообщений: 2,506
06.05.2014, 00:19 4
С шифром ты разобрался, в Паскале не понимаешь, а в С(++)?
Если нет, то почему бы сразу в этом не признаться, а если да, то тут уже я не понимаю.
Как, допустим, такой достаточно простой пример http://ru.wikibooks.org/wiki/%D0%A8%...BE%D0%BD%D0%B0 не суметь перевести в требуемый язык? Разница минимальна и интуитивно понятна.
Дело не только в языке, но и в понимании задачи, что многие активизировавшиеся в последнее время студенты пытаются усиленно скрыть, выдавая найденный код за "самолично полученный потом и кровью".
Я сам иногда применяю чужой код в том или ином виде для решения части общей задачи, но хотя бы понимаю, что делаю, и как он примерно/точно работает.
Так почему бы не начать пытаться хотя бы немного думать головой.
Блондинок, путающих принтер с модемом, и дворников с высшим образованием стране хватает (да, я брюзга, но тяжело не начать рвать волосы на ..., читая здесь многие темы, содержащие в том числе слово "помогите").
0
BRcr
4023 / 2312 / 292
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
06.05.2014, 06:39 5
В целях сохранения растительности тогда советую воздержаться от чтения тем дамы под ником CocaCola...

Vitali, ты главное пробуй сделать, а ошибки поправить мы поможем.
0
Vitali
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 4
09.05.2014, 21:48  [ТС] 6
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
int i,j,k=0,n;
   String Stroka1[255], Stroka2[255];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 
}
//---------------------------------------------------------------------------
 
 
 
 
 
 
 
 
 
 
 
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
for(i=0;i<255;i++)
{
Stroka1[i]=Edit1->Text;
 
     if(Stroka1[i]=="a")
     Stroka2[i]="AAAAA";
     if(Stroka1[i]=="b")
     Stroka2[i]="AAAAB";
     if(Stroka1[i]=="c")
     Stroka2[i]="AAABA";
     if(Stroka1[i]=="d")
     Stroka2[i]="AAABB";
     if(Stroka1[i]=="e")
     Stroka2[i]="AABAA";
     if(Stroka1[i]=="f")
     Stroka2[i]="AABAB";
     if(Stroka1[i]=="g")
     Stroka2[i]="AABBA";
     if(Stroka1[i]=="h")
     Stroka2[i]="AABBB";
     if(Stroka1[i]=="i")
     Stroka2[i]="ABAAA";
     if(Stroka1[i]=="j")
     Stroka2[i]="ABAAB";
     if(Stroka1[i]=="k")
     Stroka2[i]="ABABA";
     if(Stroka1[i]=="l")
     Stroka2[i]="ABABB";
     if(Stroka1[i]=="m")
     Stroka2[i]="ABBAA";
     if(Stroka1[i]=="n")
     Stroka2[i]="ABBAB";
     if(Stroka1[i]=="o")
     Stroka2[i]="ABBBA";
     if(Stroka1[i]=="p")
     Stroka2[i]="ABBBB";
     if(Stroka1[i]=="q")
     Stroka2[i]="BAAAA";
     if(Stroka1[i]=="r")
     Stroka2[i]="BAAAB";
     if(Stroka1[i]=="s")
     Stroka2[i]="BAABA";
     if(Stroka1[i]=="t")
     Stroka2[i]="BAABB";
     if(Stroka1[i]=="u")
     Stroka2[i]="BABAA";
     if(Stroka1[i]=="v")
     Stroka2[i]="BABAB";
     if(Stroka1[i]=="w")
     Stroka2[i]="BABBA";
     if(Stroka1[i]=="x")
     Stroka2[i]="BABBB";
     if(Stroka1[i]=="y")
     Stroka2[i]="BBAAA";
     if(Stroka1[i]=="z")
     Stroka2[i]="BBAAB";
 
     }
 
     for(i=0;i<255;i++)
     Edit2->Text=Stroka2[i];
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
Label1->Caption="Âåä³òü Г§Г*øèôðîâГ*Г*ГЁГ© ГІГҐГЄГ±ГІ";
Label2->Caption="ÐîçøèôðîâГ*Г*ГЁГ© ГІГҐГЄГ±ГІ";
BitBtn2->Enabled=false;
BitBtn3->Enabled=true;
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
for(i=0;i<255;i++)
{
Stroka1[i]=Edit1->Text;
 
         if(Stroka1[i]=="AAAAA")
         Stroka2[i]="a";
         if(Stroka1[i]=="AAAAB")
         Stroka2[i]="b";
         if(Stroka1[i]=="AAABA")
         Stroka2[i]="c";
         if(Stroka1[i]=="AAABB")
         Stroka2[i]="d";
         if(Stroka1[i]=="AABAA")
         Stroka2[i]="e";
         if(Stroka1[i]=="ABABA")
         Stroka2[i]="f";
         if(Stroka1[i]=="AABBA")
         Stroka2[i]="g";
         if(Stroka1[i]=="AABBB")
         Stroka2[i]="h";
         if(Stroka1[i]=="ABAAA")
         Stroka2[i]="i";
         if(Stroka1[i]=="ABAAB")
         Stroka2[i]="j";
         if(Stroka1[i]=="ABABA")
         Stroka2[i]="k";
         if(Stroka1[i]=="ABABB")
         Stroka2[i]="l";
         if(Stroka1[i]=="ABBAA")
         Stroka2[i]="m";
         if(Stroka1[i]=="ABBAB")
         Stroka2[i]="n";
         if(Stroka1[i]=="ABBBA")
         Stroka2[i]="o";
         if(Stroka1[i]=="ABBBB")
         Stroka2[i]="p";
         if(Stroka1[i]=="BAAAA")
         Stroka2[i]="q";
         if(Stroka1[i]=="BAAAB")
         Stroka2[i]="r";
         if(Stroka1[i]=="BAABA")
         Stroka2[i]="s";
         if(Stroka1[i]=="BAABB")
         Stroka2[i]="t";
         if(Stroka1[i]=="BABAA")
         Stroka2[i]="u";
         if(Stroka1[i]=="BABAB")
         Stroka2[i]="v";
         if(Stroka1[i]=="BABBA")
         Stroka2[i]="w";
         if(Stroka1[i]=="BABBB")
         Stroka2[i]="x";
         if(Stroka1[i]=="BBAAA")
         Stroka2[i]="y";
         if(Stroka1[i]=="BBAAB")
         Stroka2[i]="z";
 
             }
 
     for(i=0;i<255;i++)
     Edit2->Text=Stroka2[i];
 
}
//---------------------------------------------------------------------------
Это мой код. Но, к сожалению, он переводит только по одной букве. Я не могу понять, как сделать, чтобы программа суммировала все буквы.
0
demon_7
259 / 191 / 60
Регистрация: 12.05.2013
Сообщений: 857
09.05.2014, 22:50 7
дак просто,
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
Stroka1=Edit1->Text;
Stroka2="";
for(i=0;i<Stroka1.Lenght();i++)
{
     if(Stroka1[i]=="a")
     Stroka2=Stroka2+"AAAAA";
     if(Stroka1[i]=="b")
     Stroka2=Stroka2+"AAAAB";
         ------------
         //и так далее
Это будет само шифрование, а дешифрирование чуточку сложнее.
Вы должны понимать что запись Stroka2[i] говорит, о неком символе в данной переменной. Уточняю о неком символе в единственном числе.
Поэтому Ваш опыт Stroka1[i]=="AAAAA" не совсем удачный, так как 1 никогда не будет равно 4.
0
Vitali
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 4
10.05.2014, 12:15  [ТС] 8
Спасибо большое !
Я попробую с дешифровкой что-то сделать.
0
demon_7
259 / 191 / 60
Регистрация: 12.05.2013
Сообщений: 857
10.05.2014, 12:33 9
там тоже все просто) н пока попытайтесь сами а потом уже если не получится подскажем
0
BRcr
4023 / 2312 / 292
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
13.05.2014, 15:34 10
Лучший ответ Сообщение было отмечено BRcr как решение

Решение

Вариант на тему циклической последовательности шифра Бэкона. Ибо ручное заполнения словаря влом...

Экзешник - Project1.rar

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
class TForm1 : public TForm
{
__published: // IDE-managed Components
 
    TMemo * memo_decrypted;
    TMemo * memo_code;
    TMemo * memo_encrypted;
    TButton * btn_encrypt;
    TButton * btn_decrypt;
 
    void __fastcall btn_encryptClick( TObject * Sender );
    void __fastcall btn_decryptClick( TObject * Sender );
 
private: // User declarations
 
        public : // User declarations
 
    String letters, codes;
 
    String encrypt_text( AnsiString _text );
    String plant_code( AnsiString _text, const String & _code );
    String pickup_code( const String & _text );
    String decrypt_code( const String & _code );
 
    __fastcall TForm1( TComponent * Owner );
    // __fastcall ~TForm1( );
} ;
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
__fastcall TForm1::TForm1( TComponent * Owner ) :
    TForm( Owner )
{
    letters = "abcdefghijklmnopqrstuvwxyz";
    codes = "aaaaabbbbbabbbaabbababbaaababaab";
}
 
// ---------------------------------------------------------------------------
String TForm1::encrypt_text( AnsiString _text )
{
    String code;
 
    _text = _text.LowerCase( );
    for ( size_t i( 1 ), i_limit( _text.Length( ) ); i <= i_limit; ++i )
    {
        if ( isalpha( _text[ i ] ) )
        {
            code += codes.SubString( letters.Pos( _text[ i ] ), 5 );
        }
    }
    return code;
}
 
// ---------------------------------------------------------------------------
String TForm1::plant_code( AnsiString _text, const String & _code )
{
    _text = _text.LowerCase( );
    for ( size_t i( 1 ), k( 1 ), i_limit( _text.Length( ) ), k_limit( _code.Length( ) );
        ( i <= i_limit ) && ( k <= k_limit ); ++i )
    {
        if ( isalpha( _text[ i ] ) && ( _code[ k++ ] == 'a' ) )
        {
            _text[ i ] = UpperCase( _text[ i ] )[ 1 ];
        }
    }
    return _text;
}
 
// ---------------------------------------------------------------------------
String TForm1::pickup_code( const String & _text )
{
    String code;
 
    for ( size_t i( 1 ), i_limit( _text.Length( ) ); i <= i_limit; ++i )
    {
        if ( isalpha( _text[ i ] ) )
        {
            code += IsUpper( _text, i ) ? 'a' : 'b';
        }
    }
    return code;
}
 
// ---------------------------------------------------------------------------
String TForm1::decrypt_code( const String & _code )
{
    String text;
    for ( size_t i( 1 ), k, i_limit( _code.Length( ) ); i < i_limit; i += 5 )
    {
        if ( k = codes.Pos( _code.SubString( i, 5 ) ) )
        {
            text += letters[ k ];
        }
    }
    return text;
}
 
// ---------------------------------------------------------------------------
void __fastcall TForm1::btn_encryptClick( TObject * Sender )
{
    String decrypted( memo_decrypted->Text ), code, encrypted( memo_encrypted->Text );
 
    if ( encrypted.Length( ) < decrypted.Length( ) * 5 )
    {
        ShowMessage( "Текст, скрывающий шифр, должен быть минимум в пять раз длиннее скрываемого текста." );
        return;
    }
 
    code = encrypt_text( decrypted );
    memo_code->Text = code;
 
    memo_encrypted->Text = plant_code( encrypted, code );
}
 
// ---------------------------------------------------------------------------
void __fastcall TForm1::btn_decryptClick( TObject * Sender )
{
    String code, encrypted( memo_encrypted->Text );
 
    code = pickup_code( encrypted );
    memo_code->Lines->Add( "\n\r" + code );
 
    memo_decrypted->Lines->Add( "\n\r" + decrypt_code( code ) );
}
0
Миниатюры
Реализация шифра Бэкона  
13.05.2014, 15:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2014, 15:34

Реализация шифра Виженера
Написать программу для шифра Виженера на С++

Реализация задачи шифра замены
Ребята, всем доброго времени суток. Помогите пожалуйста с реализацией данной задачи. Вообще что то...

Реализация шифра простой замены
Реализовать шифр простой замены. имеется двумерный массив , состоящий из символов. Шифрование...


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

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

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