Страница 1 из 2

Задача на шифровку в С++

Добавлено: 18 май 2008, 18:11
void_main
ПОжалуйста сделайте или объясните как делать! Мне нужно сделать шифровку и дешифровку методом битовых манипуляций. В С++....просто я уже в отчаянии :(

Re: Задача на шифровку в С++

Добавлено: 19 май 2008, 11:40
Хыиуду
Самый простой случай - сделать сложение по модулю 2 с какой-то константой. Расшифровка - опять сложение по модулю 2. В Паскале это XOR. В Си - не помню как, возможно ^

Re: Задача на шифровку в С++

Добавлено: 19 май 2008, 16:09
void_main
Если честно то я не понял как :confused: ...объясни пожалуйста поподробнее или на примере

Re: Задача на шифровку в С++

Добавлено: 19 май 2008, 16:25
BAHTY3
Вот 2 функции:

Код: Выделить всё

int Bin2Dec(int N[8])//перевод массива битов в число
{
  int i=0;
  int NumDec=0;
  for(i=7;i>-1;i--){
    f(N[i]==1){
      NumDec=NumDec+pow(2,7-i);
    }		
  }
  return NumDec;
}

void Dec2Bin(int NumDec)//перевод числа в строку бит
{
  int i=0;
  for(int y=0;y<8;y++){
  NumBin[y]=0;
  }
  i=7;
  while(NumDec>0){
  NumBin[i]=NumDec%2;
  NumDec=NumDec/2;
  i--;
  }
}
и верти биты как тебе только нравиться ;)
соответственно тебе нужно будет либо заводить глобальные NumBin[8] и NumDec или слегка переделать на возвращение значений функциями...
Хыиуду писал(а):Самый простой случай - сделать сложение по модулю 2 с какой-то константой. Расшифровка - опять сложение по модулю 2. В Паскале это XOR. В Си - не помню как, возможно ^

Так и есть в С,С++ это ^
пример?

Код: Выделить всё

#include<iostream.h>

int main()
{
	char temp='s';//будем шифровать s
	int hesh;

	cout << temp << endl;
	hesh=temp;
	hesh=hesh^2;
	temp=hesh;
	cout << temp << endl;
	
	return 0;
}
помоему, предельно понятно :)

Re: Задача на шифровку в С++

Добавлено: 19 май 2008, 20:11
void_main
эххх...ничего не понял и даже эти проги не запустил :(
или я тупой или...я тупой. Может сделаете программу полностью пожалуйста, понимаю что я такой не один и что вам может быть не охото тратить своё время, но всё таки? Век не забуду ;)

Re: Задача на шифровку в С++

Добавлено: 20 май 2008, 00:13
BAHTY3
Простейший способ, но он наврятли удовлетварит кокого ни будь препода в универе...

Код: Выделить всё

#include<iostream.h>

int main()
{
	FILE* in;
	FILE* out;

	char temp;

	int hesh;

	cout << "c|d\n--> ";
	cin >> temp;//вводим 'c' для кодировки файла или 'd' для его дешифрации

	if(temp=='c'){
		if((in=fopen("in.txt","r"))==NULL){//обрати внимание, что файлеки текстовые и имеют свои определенные имена ;)
			cerr << "No input file!\n";
			exit(1);
		}

		out=fopen("code.txt","w");
		
		while((temp=getc(in))!=EOF){//шифруем при помощи XoR (почитай в инете что это ;) ), да можно сделать красиво и в одну строку, но мне лень =)
			hesh=temp;
			hesh=hesh^2;
			temp=hesh;
			fprintf(out,"%c",temp);
		}

		fcloseall();
		temp='\0';
	}

	if(temp=='d'){
		if((in=fopen("code.txt","r"))==NULL){
			cerr << "No input file!\n";
			exit(1);
		}

		out=fopen("out.txt","w");
		
		while((temp=getc(in))!=EOF){
			hesh=temp;
			hesh=hesh^2;
			temp=hesh;
			fprintf(out,"%c",temp);
		}

		fcloseall();
		temp='\0';
	}

	return 0;
}
Если интересно, то могу скинуть свои старые кодеры, которые именно "манипулируют битами", в частности что ни будь в духе шифрации на основе регистра сдвигов или реализации DES... Но всегда куда приятней сделать своими руками ;)

Re: Задача на шифровку в С++

Добавлено: 20 май 2008, 04:57
void_main
Спасибо большое, только объясни как ей пользоваться...я ввожу "с" и нечего не происходит. Кстати насчёт препода в универе что ему не понравится? :)

Re: Задача на шифровку в С++

Добавлено: 20 май 2008, 10:56
MOTOCoder
Интересно, это я чего-то не понял, или здесь даже пароль не используется?

Re: Задача на шифровку в С++

Добавлено: 20 май 2008, 11:15
Хыиуду
Ну, Юлий Цезарь же со своей шифровкой имени себя тоже без пароля обходился, одним алгоритмом ;)

Re: Задача на шифровку в С++

Добавлено: 20 май 2008, 17:22
BAHTY3
MOTOCoder, ну не просили же шифрацию паролем... просто ранее было предложено просто ксорить :) ну сам понимаешь, что выкладывать нормальный шифратор как то нелепо ;)

Хыиуду, он вообще был реальной крутышкой ;)

void_main, если напрячься и взглянуть на код, то можно увидеть следущее.. при выборе 'c' программа "шифрует" содержимое файлика по имени "in.txt" и пишет результат в "code.txt", а при выборе 'd' она читает "code.txt" и пишет результат в "out.txt" :)

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