Всем доброго времени суток.Помогите плз разбраться с лабой в Borland C++ Builder 6 Дано такое задание Зашифровать открытый текст сначала с помощью многоалфавитной подстановки,затем с помощью одноалфавитной подстановки.Расшифровать Т.е у мена форма,на ней эдит для открытого текста,кнопочка Зашифровать,едит для зашифрованного текста(должно сначала шифроваться многоалф,а затем то,что получилось сразу же одноалфавитной).Расшифровывется задом наперед.. (т.е сначала одноалфавитная расшифровывается,затем многоалфавитная и в итоге должны получить открытый текст) вот что у меня получилось
| Код | //---------------------------------------------------------------------------
#include <vcl.h> #include<string.h> #pragma hdrstop #define MAXLEN 30 #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //функция, используемая при сортировке int lt(const void *a,const void *b) { if(*(char*)a<*(char*)b) return -1; else if(*(char*)a==*(char*)b) return 0; else return 1; }
//длина шифотекста unsigned size;
//шифротекст char tmp[MAXLEN];
//функция шифрования
//mnogoalfavitnoe shifrovanie void Encrypt(const char *str,const char *key,char *res, unsigned n) { char tmp[MAXLEN]; if(n<strlen(key)) strncpy(tmp, key, n); else strncpy(tmp, key, n); while(strlen(tmp)<n) strncat(tmp," ", 1); //cikl shifrovaniya for(unsigned i=0; i<n; i++) res[i]=(str[i] + tmp[i]) % 256; res[n]='\0'; }
//odnoalfavitnoe shifrovanie void Encrypt1(const char *str, const char *key,char *res,unsigned n) { for(unsigned i=0;i<n;i++) res[i] = (str[i] + key) % 256; res[n] = '\0'; }
//функция расшифрования
//odnoalfavitnoe rashifrovanie void Decrypt1(const char *str,const char *key,char *res,unsigned n) { for(unsigned i=0;i<n;i++) res[i]=(str[i]+256-key) % 256; res[n]='\0'; }
//mnogoalfavitnoe rashifrovanie void Decrypt(const char *str,const char *key,char *res,unsigned n) { char tmp[MAXLEN]; if(n<strlen(key)) strncpy(tmp, key, n); else strncpy(tmp, key, n); while(strlen(tmp)<n) strncat(tmp," ",1); //цикл расшифрования for(unsigned i=0;i<n;i++) res[i]=(str[i]+256-tmp[i]) % 256; //добавление 0-символа в конец расшифрованного текста res[n]='\0'; }
//--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { }
//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { //вызов функции шифрования Encrypt(Edit1->Text.c_str(),Edit3->Text.c_str(),tmp); Edit2->Text=tmp; Encrypt1(Edit2->Text.c_str(),Edit3->Text.c_str(),tmp);
/*if(isdigit(Edit3->Text[1])) Encrypt(Edit1->Text.c_str(),Edit3->Text[1]-'0',tmp); else Encrypt(Edit1->Text.c_str(),Edit3->Text[1],tmp); */ //отображение шифротекста Edit2->Text=tmp; //сохранение длины шифротекста size=Edit2->Text.Length(); Button2->Enabled=true; Button1->Enabled=false; }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender) { //вызов функции расшифрования Decrypt1(Edit2->Text.c_str(),Edit3->Text.c_str(),tmp,size); Edit1->Text=AnsiString(tmp).SubString(1,MAXLEN); Decrypt(Edit1->Text.c_str(),Edit3->Text.c_str(),tmp,size); /*if(isdigit(Edit3->Text[1])) Decrypt(Edit2->Text.c_str(),Edit3->Text[1]-'0',tmp,size); else Decrypt(Edit2->Text.c_str(),Edit3->Text[1],tmp,size);*/ //отображение расшифрованного текста Edit1->Text=AnsiString(tmp).SubString(1,MAXLEN); Button1->Enabled=true; Button2->Enabled=false; }
|
первая ошибка,которая нашлась и я не знаю как ее исправить находится тут //odnoalfavitnoe shifrovanie void Encrypt1(const char *str, const char *key,char *res,unsigned n) { for(unsigned i=0;i<n;i++) res[i] = (str[i] + key) % 256; res[n] = '\0'; } выделяется эта строка res[i] = (str[i] + key) % 256; пишется вроде что-то типа этого Illegal use of pointer правда не уверен на 100% что это к этому относится:( |