Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Объясните программу / 10 сообщений из 10, страница 1 из 1
26.12.2014, 13:23
    #38843755
kot07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните программу
Добрый день, можете объяснить мне что происходит в программе по строчно?
Код: plaintext
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.
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
AnsiString code;
unsigned char RC4_S[256];
int RC4_i;//Счетчик i
int RC4_j;// Счетчик j
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
	t=0;
}
//---------------------------------------------------------------------------
void __fastcall RC4_InitKey(unsigned char* Key, int KeyLength)
{ //key массивключевой информации и массив его длины
	RC4_i = 0;
	RC4_j = 0;// Счетчик обнуляем
	for (int i=0; i<256; i++)// Обнуляем матрицу
		RC4_S[i] = i;
	int j=0;
	for (int i=0; i<256; i++)
	{
		j = (j + Key[i % KeyLength] + RC4_S[i]) % 256;// Изменяем временный счетчик "j" в соответствии с алгоритмом
	 // с использованием ключевой информации
		unsigned char temp = RC4_S[i];// переставляем местами S[i] и S[j]
		RC4_S[i] = RC4_S[j];
		RC4_S[j] = temp;
	}
}
//---------------------------------------------------------------------------
unsigned char __fastcall RC4_Transform(unsigned char nextByte)   //преобразование
{
//---- Параметры:
//----    nextByte      - байт для преобразования
//---- Результат:
//----    преобразованный байт

	RC4_i = (RC4_i + 1) % 256;// Изменяем счетчик "i" в соответствии с алгоритмом
	RC4_j = (RC4_j + RC4_S[RC4_i]) % 256;// Изменяем счетчик "j" в соответствии с алгоритмом
	unsigned char temp = RC4_S[RC4_i];// Переставляем местами S[i] и S[j]
	RC4_S[RC4_i] = RC4_S[RC4_j];
	RC4_S[RC4_j] = temp;
	temp = (RC4_S[RC4_i] + RC4_S[RC4_j]) % 256;// Определяем маску в соответствии с алгоритмом
	return nextByte ^ RC4_S[temp];// Накладываем маску на исходный байт по XOR
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
	AnsiString keysh="";
	keysh=Edit1->Text;
	if (keysh=="")
		MessageDlg("Введите ключ",mtInformation,TMsgDlgButtons()<<mbOK,0);
	else
	{
		code=keysh;
		char* US=new char[Edit1->Text.Length()];
		for(int z=0;z<Edit1->Text.Length();z++)
			US[z]=Edit1->Text[z+1];
		RC4_InitKey(US, Edit1->Text.Length());
		delete []US;
		int in=FileOpen(OpenDialog1->FileName,fmOpenRead);
		int out=FileOpen("C:\MSZI\encoding4.txt",fmOpenWrite);
		unsigned char buffer[4096];
		int readed;
		while(readed=FileRead(in,buffer,4096))
		{
			for (int i=0; i<readed; i++)
				buffer[i] = RC4_Transform(buffer[i]);
			FileWrite(out,buffer,readed);
		}
		FileClose(in);
		FileClose(out);
		Memo2->Lines->LoadFromFile("C:\MSZI\encoding4.txt");
	}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
	AnsiString keyr="";
	keyr=Edit2->Text;
	if (keyr=="")
		MessageDlg("Введите ключ",mtInformation,TMsgDlgButtons()<<mbOK,0);
	else
	{
		char* US=new char[Edit2->Text.Length()];
		for(int z=0;z<Edit2->Text.Length();z++)
			US[z]=Edit2->Text[z+1];
		RC4_InitKey(US, Edit2->Text.Length());
		delete []US;
		int in=FileOpen(OpenDialog1->FileName,fmOpenRead);
		int out=FileOpen("C:\MSZI\decoding4.txt",fmOpenWrite);
		unsigned char buffer[4096];
		int readed;
		while(readed=FileRead(in,buffer,4096))
		{
			for (int i=0; i<readed; i++)
				buffer[i] = RC4_Transform(buffer[i]);
			FileWrite(out,buffer,readed);
		}
		FileClose(in);
		FileClose(out);
		Memo3->Lines->LoadFromFile("C:\MSZI\decoding4.txt");
		if (keyr!=code)
		{
			t++;
			MessageBox(0,L"Вы ввели неверный ключ.\nРасшифровка некорректна!", L"Внимание", MB_OK);
			if(t==3)
			{
				Blocking();
				MessageBox(0,L"Вы 3 раза ввели неверный ключ.\nПрограмма заблокирована!", L"Внимание", MB_OK);
			}
		}
		else
			t=0;
	}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{

	if(OpenDialog1->Execute())
	{
	 Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
	}
   //	Memo1->Lines->LoadFromFile("Sourse.txt");
}
//---------------------------------------------------------------------------
void TForm1::Blocking()
{
	Button1->Enabled=false;
	Button2->Enabled=false;
	Button3->Enabled=false;
	Edit1->Enabled=false;
	Edit2->Enabled=false;
	Memo1->Enabled=false;
	Memo2->Enabled=false;
	Memo3->Enabled=false;
}
...
Рейтинг: 0 / 0
26.12.2014, 13:39
    #38843773
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните программу
Что конкретно непонятно? Сомневаюсь что кому-то охото комментировать каждую строчку.

Тут какое-то шифрование/дешифрование алгоритмом RC4
...
Рейтинг: 0 / 0
26.12.2014, 13:58
    #38843801
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните программу
kot07,

я могу только прокомментировать все целиком: какой то дельфовый говнокод.
...
Рейтинг: 0 / 0
26.12.2014, 14:05
    #38843815
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните программу
Скорее всего автор ожидает некого "живого и яркого" художественного описания
того что делает код.

Неудивительно. Комментарии Кэпа-очевидность не могут не угнетать. Скажите
пожалуйста. Ну кому такое пояснение вообще нужно?

Код: plaintext
1.
RC4_j = 0;// Счетчик обнуляем



Гораздо важнее описывать общий смысл алгоритма.
...
Рейтинг: 0 / 0
26.12.2014, 17:25
    #38844067
wst
wst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните программу
Если цепляться к комментарям, то этот поинтереснее будет:
Код: plaintext
1.
2.
for (int i=0; i<256; i++)// Обнуляем матрицу
		RC4_S[i] = i;
...
Рейтинг: 0 / 0
26.12.2014, 17:40
    #38844079
kot07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните программу
в целом то я понимаю что шифрирование/дешифрирование происходит...зачем нужны счетчики R[i] и R[j]
...
Рейтинг: 0 / 0
26.12.2014, 19:00
    #38844150
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните программу
kot07 , закомментарь их и попробуй собрать проект. Компиллятор тебе тут-же подскажет где счётчики используются.
...
Рейтинг: 0 / 0
26.12.2014, 20:19
    #38844198
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните программу
kot07в целом то я понимаю
А в частности что непонятно? Шифратор шифрует, он же дешифрует, алгоритм обратимый до безобразия.
...
Рейтинг: 0 / 0
26.12.2014, 21:22
    #38844239
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните программу
Код: plaintext
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.
#include <vcl.h>  // включение файла vcl.h ! Ибо нет бога кроме Дельфи, и VCL -- пророк его.
#pragma hdrstop  // магическая фраза, которую понимают только гуру Дельфи 20-го уровня или аватары
#include "Unit1.h" // включение файла Unit1.h
//---------------------------------------------------------------------------
#pragma package(smart_init)  // магическая фраза, которую понимают только аватары 20-го уровня.
#pragma resource "*.dfm"    // магическая фраза, которую понимают только аватары 10-го уровня. Важно её запомнить, потому что без неё не работает. 
TForm1 *Form1;  // Объявление указателя на объект класса TForm1 
//---------------------------------------------------------------------------

// Далее идут четыре магические строки, которые превращают весь оставшийся код в говно, не смотря на все прежние усилия аватаров 10-го и 20-го уровней.
AnsiString code; 
unsigned char RC4_S[256];
int RC4_i;//Счетчик i
int RC4_j;// Счетчик j

__fastcall TForm1::TForm1(TComponent* Owner)  // конструктор класса TForm1
	: TForm(Owner)
{
	t=0; // присвоение переменной t значения 0
}


// Далее следует тот код, который был превращён в говно...
// Бессмысленно обсуждать достоинства этого кода и утончённый эстетизм
// его создателей, поскольку всё равно всё превращено в говно.

//---------------------------------------------------------------------------
void __fastcall RC4_InitKey(unsigned char* Key, int KeyLength) // 
{ //key массивключевой информации и массив его длины
	RC4_i = 0;
	RC4_j = 0;// Счетчик обнуляем
	for (int i=0; i<256; i++)// Обнуляем матрицу
		RC4_S[i] = i;
	int j=0;
	for (int i=0; i<256; i++)
	{
		j = (j + Key[i % KeyLength] + RC4_S[i]) % 256;// Изменяем временный счетчик "j" в соответствии с алгоритмом
	 // с использованием ключевой информации
		unsigned char temp = RC4_S[i];// переставляем местами S[i] и S[j]
		RC4_S[i] = RC4_S[j];
		RC4_S[j] = temp;
	}
}
//---------------------------------------------------------------------------
unsigned char __fastcall RC4_Transform(unsigned char nextByte)   //преобразование
{
//---- Параметры:
//----    nextByte      - байт для преобразования
//---- Результат:
//----    преобразованный байт

	RC4_i = (RC4_i + 1) % 256;// Изменяем счетчик "i" в соответствии с алгоритмом
	RC4_j = (RC4_j + RC4_S[RC4_i]) % 256;// Изменяем счетчик "j" в соответствии с алгоритмом
	unsigned char temp = RC4_S[RC4_i];// Переставляем местами S[i] и S[j]
	RC4_S[RC4_i] = RC4_S[RC4_j];
	RC4_S[RC4_j] = temp;
	temp = (RC4_S[RC4_i] + RC4_S[RC4_j]) % 256;// Определяем маску в соответствии с алгоритмом
	return nextByte ^ RC4_S[temp];// Накладываем маску на исходный байт по XOR
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
	AnsiString keysh="";
	keysh=Edit1->Text;
	if (keysh=="")
		MessageDlg("Введите ключ",mtInformation,TMsgDlgButtons()<<mbOK,0);
	else
	{
		code=keysh;
		char* US=new char[Edit1->Text.Length()];
		for(int z=0;z<Edit1->Text.Length();z++)
			US[z]=Edit1->Text[z+1];
		RC4_InitKey(US, Edit1->Text.Length());
		delete []US;
		int in=FileOpen(OpenDialog1->FileName,fmOpenRead);
		int out=FileOpen("C:\MSZI\encoding4.txt",fmOpenWrite);
		unsigned char buffer[4096];
		int readed;
		while(readed=FileRead(in,buffer,4096))
		{
			for (int i=0; i<readed; i++)
				buffer[i] = RC4_Transform(buffer[i]);
			FileWrite(out,buffer,readed);
		}
		FileClose(in);
		FileClose(out);
		Memo2->Lines->LoadFromFile("C:\MSZI\encoding4.txt");
	}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
	AnsiString keyr="";
	keyr=Edit2->Text;
	if (keyr=="")
		MessageDlg("Введите ключ",mtInformation,TMsgDlgButtons()<<mbOK,0);
	else
	{
		char* US=new char[Edit2->Text.Length()];
		for(int z=0;z<Edit2->Text.Length();z++)
			US[z]=Edit2->Text[z+1];
		RC4_InitKey(US, Edit2->Text.Length());
		delete []US;
		int in=FileOpen(OpenDialog1->FileName,fmOpenRead);
		int out=FileOpen("C:\MSZI\decoding4.txt",fmOpenWrite);
		unsigned char buffer[4096];
		int readed;
		while(readed=FileRead(in,buffer,4096))
		{
			for (int i=0; i<readed; i++)
				buffer[i] = RC4_Transform(buffer[i]);
			FileWrite(out,buffer,readed);
		}
		FileClose(in);
		FileClose(out);
		Memo3->Lines->LoadFromFile("C:\MSZI\decoding4.txt");
		if (keyr!=code)
		{
			t++;
			MessageBox(0,L"Вы ввели неверный ключ.\nРасшифровка некорректна!", L"Внимание", MB_OK);
			if(t==3)
			{
				Blocking();
				MessageBox(0,L"Вы 3 раза ввели неверный ключ.\nПрограмма заблокирована!", L"Внимание", MB_OK);
			}
		}
		else
			t=0;
	}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{

	if(OpenDialog1->Execute())
	{
	 Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
	}
   //	Memo1->Lines->LoadFromFile("Sourse.txt");
}
//---------------------------------------------------------------------------
void TForm1::Blocking()
{
	Button1->Enabled=false;
	Button2->Enabled=false;
	Button3->Enabled=false;
	Edit1->Enabled=false;
	Edit2->Enabled=false;
	Memo1->Enabled=false;
	Memo2->Enabled=false;
	Memo3->Enabled=false;
}
...
Рейтинг: 0 / 0
27.12.2014, 12:21
    #38844412
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните программу
Код: plaintext
1.
2.
3.
...
#pragma hdrstop  // магическая фраза, которую понимают только гуру Дельфи 20-го уровня или аватары
...

так в стройке включается precompiled headers, ничего военного.
И врядли гуру Дельфи понимают эту строчку, кстати )))

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
...
// Далее идут четыре магические строки, которые превращают весь оставшийся код в говно, не смотря на все прежние усилия аватаров 10-го и 20-го уровней.
AnsiString code; 
unsigned char RC4_S[256];
int RC4_i;//Счетчик i
int RC4_j;// Счетчик j
...

о да!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Объясните программу / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]