Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шифрование данных 
:(
    Опции темы
RiLL
Дата 23.5.2009, 02:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 1.7.2008

Репутация: нет
Всего: нет



Всем доброго времени суток.Помогите плз разбраться с лабой в Borland C++ Builder 6
Дано такое задание
Зашифровать открытый текст сначала с помощью многоалфавитной подстановки,затем с помощью одноалфавитной подстановки.Расшифровать
Т.е у мена форма,на ней эдит для открытого текста,кнопочка Зашифровать,едит для зашифрованного текста(должно сначала шифроваться многоалф,а затем то,что получилось сразу же одноалфавитной).Расшифровывется задом наперед..smile(т.е сначала одноалфавитная расшифровывается,затем многоалфавитная и в итоге должны получить открытый текст)
вот что у меня получилось
Код

//---------------------------------------------------------------------------

#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% что это к этому относится:(

Это сообщение отредактировал(а) RiLL - 23.5.2009, 02:46
PM MAIL   Вверх
fry
Дата 24.5.2009, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: 2
Всего: 3



Цитата

выделяется эта строка
 res[i] = (str[i] + key) % 256;
пишется вроде что-то типа этого
Illegal use of pointer
правда не уверен на 100% что это к этому относится:(


Ну, здесь явно видно, что, типа, ну ты понял о чем я......

Пиши ошибку полностью, в следующий раз будет легче разобраться если чего серьезнее этого будет.

Код

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';
}


Может так:

Код

void Encrypt1(const char *str, const char *key,char *res,unsigned n)
{
  for(unsigned i=0;i<n;i++)            
  res[i] = (str[i] + key[i]) % 256;  <<---------------<-<-<
  res[n] = '\0';
}



PM MAIL   Вверх
andrew_121
Дата 24.5.2009, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(fry @  24.5.2009,  01:18 Найти цитируемый пост)
Может так:

Да. При условии что оба массива одного размера. Но не факт!


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
RiLL
Дата 24.5.2009, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 1.7.2008

Репутация: нет
Всего: нет



fry,andrew_121 спасибо за помощь
еще 1 вопросик можно?
вот это
Код

void Encrypt1(const char *str, const char *key,char *res,unsigned n)

и это
Код

Encrypt1(Edit2->Text.c_str(),Edit3->Text.c_str(),tmp);



выделяется вот эта строка
Код

Encrypt1(Edit2->Text.c_str(),Edit3->Text.c_str(),tmp);


и пишется ошибка
  [C++ Error] Unit1.cpp(86): E2193 Too few parameters in call to 'Encrypt(const char *,const char *,char *,unsigned int)'
  [C++ Error] Unit1.cpp(88): E2193 Too few parameters in call to 'Encrypt1(const char *,const char *,char *,unsigned int)'

помогите исправить плз?

Это сообщение отредактировал(а) RiLL - 24.5.2009, 12:26
PM MAIL   Вверх
zim22
Дата 24.5.2009, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(RiLL @  24.5.2009,  12:21 Найти цитируемый пост)
 [C++ Error] Unit1.cpp(86): E2193 Too few parameters in call to 'Encrypt(const char *,const char *,char *,unsigned int)'

слишком мало параметров.
функции нужно 4 параметра.


--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0555 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.