0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 4
1

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

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

Author24 — интернет-сервис помощи студентам
Помогите, пожалуйста реализовать шифр Бэкона. С шифром я разобрался, но запрограммировать пока не получается. Примерно, это должно выглядеть так : в одну строку вводим текст, а во второй он сразу же шифруется. При нажатии кнопки, действия меняются местами, то есть, соответственно в первую строку вводим шифр, во второй получаем текст.
Миниатюры
Реализация шифра Бэкона  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2014, 22:11
Ответы с готовыми решениями:

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

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

Реализация шифра Гронсфельда.
Реализация шифра Гронсфельда. Реализация модифицированного шифра Гронсфельда.

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

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

Vitali, ты главное пробуй сделать, а ошибки поправить мы поможем.
0
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
260 / 192 / 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
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 4
10.05.2014, 12:15  [ТС] 8
Спасибо большое !
Я попробую с дешифровкой что-то сделать.
0
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
10.05.2014, 12:33 9
там тоже все просто) н пока попытайтесь сами а потом уже если не получится подскажем
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.05.2014, 15:34
Помогаю со студенческими работами здесь

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

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

Реализация шифра Гронсфельда.
Реализация шифра Гронсфельда. Реализация модифицированного шифра Гронсфельда.

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru