Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2010, 23:05   #1
PARTIZAN88
Новичок
Джуниор
 
Регистрация: 20.06.2010
Сообщений: 2
Восклицание Шифрование методом побайтного сложения

Программа должна производить сложение(вычитание при дешифровании) символов массива с текстом(file) и массива ключа(key).Шифрование и дешифрование необходимо оформить в виде прототипов функций.(Microsoft Visual C++ 6.0) Программу я набрал, но она не запускается не могу понять в чём дело. Выдаёт ошибку:
: error C2440: '=' : cannot convert from 'int' to 'char [6]'
There are no conversions to array types, although there are conversions to references or pointers to arrays
И 2 предупреждения:
: warning C4508: 'code' : function should return a value; 'void' return type assumed
: warning C4508: 'decode' : function should return a value; 'void' return type assumed
Если задать прототипу тип char то остаётся одна ошибка:
: error C2440: '=' : cannot convert from 'char' to 'char [6]'
Вот код программы:
Код:
#include<stdio.h>
#include<string.h>
#include<iostream.h>
#include<windows.h>

char code(char ,int ,char ,int );
char decode(char ,int ,char ,int );

int main()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);

	char file[]={'М', 'о', 'с' , 'к' , 'в' , 'а' };
	char key[]={'K','e','y'};
	int kol_el_file=6;
	int kol_el_key=3;

//void decode(char *file,int kol_el_file,char *key,int kol_el_key);

file=code(*file,kol_el_file,*key,kol_el_key);
	cout<<file<<endl;
return 0;
} 

//=====
char code(char *file,int kol_el_file,char *key,int kol_el_key)
{
int j=0,C;
char S;
for(int i=0;i<kol_el_file;i++)
{
C=key[j]+file[i];
if(C>255)
{
	S=C-255;
	file[i]=S;
}
else 
{
S=C;
file[i]=S;
}
if(j>kol_el_key)
j=0;
j++;
}
}

char decode(char *file,int kol_el_file,char *key,int kol_el_key)
{
int j=0,C;
char S;
for(int i=0;i<kol_el_file;i++)
{
if(file[i]<key[j])
{
	S=(file[i]+255)-key[j];
	file[j]=S;
}
else 
{
S=file[i]-key[j];
file[i]=S;
}
if(j>kol_el_key)
j=0;
j++;
}
}

Последний раз редактировалось Stilet; 21.06.2010 в 10:03.
PARTIZAN88 вне форума Ответить с цитированием
Старый 21.06.2010, 10:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
char code(char ,int ,char ,int );
Что она должна возвращать то?

подозреваю что тебе нуна что-то в этом роде:
Код:
// йцу.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <windows.h>


char *code(char *file,int kol_el_file,char *key,int kol_el_key);
char *decode(char *file,int kol_el_file,char *key,int kol_el_key);


using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);

	char file[]={'М', 'о', 'с' , 'к' , 'в' , 'а' };
	char key[]={'K','e','y'};
	char *s=new char[255];
	int kol_el_file=6;
	int kol_el_key=3;

//void decode(char *file,int kol_el_file,char *key,int kol_el_key);

   s=code(file,kol_el_file, key,kol_el_key);
	cout<<s<<endl;
   s=	 decode(s,kol_el_file, key,kol_el_key);
	cout<<s<<endl;
	getchar();
	return 0;
}

char *code(char *file,int kol_el_file,char *key,int kol_el_key)
{
	char *s=new char[strlen(file)+1];
	int i=0;
	for(;i<strlen(file);i++)
		for(int j=0;j<strlen(key);j++){
			s[i]=file[i]-key[j];i++;
		}
    s[i+1]=0;
 return s; 
}

char *decode(char *file,int kol_el_file,char *key,int kol_el_key)
{
	char *s=new char[strlen(file)];
	int i=0;
	for(;i<strlen(file);i++)
		for(int j=0;(j<strlen(key))&&(i<strlen(file));j++){
			s[i]=file[i]+key[j];i++;
		}
    s[i+1]=0;
 return s; 
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.06.2010, 13:01   #3
PARTIZAN88
Новичок
Джуниор
 
Регистрация: 20.06.2010
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Что она должна возвращать то?[/CODE]
Возвращать она должна изменённый массив file, задача в том и состоит чтобы зашифровать(дешифровать) символы в нём. Вот описание алгоритма шифрования(code):
Цитата:
В качестве входных данных выступают два массива: массив символов file, предварительно считанных из текстового файла и массив символов key(введённых пользователем или считанных из файла). При выборе пользователем функции шифрования файла программа начинает начинает производить посимвольное сложение массивов file и key до тех пор пока не будет достигнут конец массива file. В случае, когда размер массива key меньше размера file, указатель на элемент массива key обнуляется, когда указатель становится больше числа элементов в key. При сложении символов может возникнуть ситуация когда сумма символов может превысить конечное значение для байта 11111111(255), на этот случай в программе присутствует проверка на переполнение. Если переполнение произошло, то осуществляется операция вычитания из суммы значения 255, полученная в результате разность и записывается обратно в file в качестве результата на место исходного символа. После того как будут просуммированы все символы, массив file с записанными в него результатами возвращается программе-интерфейсу для последующей записи в фаил.
А это дешифрование(decode):
Цитата:
При необходимости расшифровывания ранее зашифрованного текста применяется программа дешифрации, которая производит обратные действия относительно программы шифрования. Для расшифровки символов в массиве file необходимо произвести посимвольное вычитание из file символов хранящихся в массиве key. В случае, когда код символа, из которого производится вычитание, меньше кода вычитаемого символа необходимо сначала прибавить к нему код 11111111 (255), а потом выполнить непосредственно само вычитание, результат которого и помещается в массив file на место исходного символа. Если же вычитаемое наоборот меньше то сразу же производится операция вычитания.
При достижении конца массива key, который скорее всего будет меньше массива file, производится обнуление указателя на элемент массива key. После данной операции при последующих вычитаниях опять используются символы массива key начиная с первого и так снова и снова пока не будет достигнут конец массива file, о чём будет свидетельствовать указатель на символ из массива file, равный общему числу символов в нём. Общее число символов подсчитывается заранее при считывании текста из файла.
Считывание из файла мне делать не надо, нужны только непосредственно шифрование и дешифрование.

Последний раз редактировалось Stilet; 21.06.2010 в 13:20.
PARTIZAN88 вне форума Ответить с цитированием
Старый 21.06.2010, 13:21   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
нужны только непосредственно шифрование и дешифрование.
Ну дык то что я написал бери и пользуйся.
Код:
file=code(file,kol_el_file, key,kol_el_key);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифрование методом гаммирования student_63 Безопасность, Шифрование 9 28.04.2012 17:36
Шифрование методом перестановок Sphex Фриланс 7 18.08.2010 14:06
Шифрование методом Цезаря! Александра1000000 Общие вопросы C/C++ 10 07.06.2010 16:02
Шифрование методом замещения Skytis Помощь студентам 3 25.05.2008 10:24
Шифрование методом сдвига Paul Hindenburg Общие вопросы Delphi 5 24.01.2008 08:30