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

void_main
Сообщения: 5
Зарегистрирован: 18 май 2008, 18:06

ПОжалуйста сделайте или объясните как делать! Мне нужно сделать шифровку и дешифровку методом битовых манипуляций. В С++....просто я уже в отчаянии :(
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Самый простой случай - сделать сложение по модулю 2 с какой-то константой. Расшифровка - опять сложение по модулю 2. В Паскале это XOR. В Си - не помню как, возможно ^
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
void_main
Сообщения: 5
Зарегистрирован: 18 май 2008, 18:06

Если честно то я не понял как :confused: ...объясни пожалуйста поподробнее или на примере
BAHTY3
Сообщения: 106
Зарегистрирован: 30 авг 2005, 02:53
Откуда: Санкт-Петербург
Контактная информация:

Вот 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;
}
помоему, предельно понятно :)
Жизнь ― это то, что с нами происходит, пока мы строим планы.© Джон Леннон.
void_main
Сообщения: 5
Зарегистрирован: 18 май 2008, 18:06

эххх...ничего не понял и даже эти проги не запустил :(
или я тупой или...я тупой. Может сделаете программу полностью пожалуйста, понимаю что я такой не один и что вам может быть не охото тратить своё время, но всё таки? Век не забуду ;)
BAHTY3
Сообщения: 106
Зарегистрирован: 30 авг 2005, 02:53
Откуда: Санкт-Петербург
Контактная информация:

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

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

#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... Но всегда куда приятней сделать своими руками ;)
Жизнь ― это то, что с нами происходит, пока мы строим планы.© Джон Леннон.
void_main
Сообщения: 5
Зарегистрирован: 18 май 2008, 18:06

Спасибо большое, только объясни как ей пользоваться...я ввожу "с" и нечего не происходит. Кстати насчёт препода в универе что ему не понравится? :)
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Интересно, это я чего-то не понял, или здесь даже пароль не используется?
Ни что так не ограничивает фантазию программиста, как компилятор...
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Ну, Юлий Цезарь же со своей шифровкой имени себя тоже без пароля обходился, одним алгоритмом ;)
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
BAHTY3
Сообщения: 106
Зарегистрирован: 30 авг 2005, 02:53
Откуда: Санкт-Петербург
Контактная информация:

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

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

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

не понравиться абсолютно пофигистичное отношение к заданию ;) потому как ну ооочень тупо написано.
Жизнь ― это то, что с нами происходит, пока мы строим планы.© Джон Леннон.
Ответить