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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2011, 22:19   #1
Сольвейг
Пользователь
 
Регистрация: 10.12.2011
Сообщений: 17
По умолчанию

"Один из методов шифрации называется наложением гаммы. Делается это следующим образом: берется некоторое случайное число в диапазоне от 127 до 255 — гамма, и код каждого символа строки заменяется кодом, получающимся в результате операции: новый код=старый код XOR гамма.
Написать программу, реализующую:
• данный метод шифрации;
• дешифрацию строки при заданной гамме.

Входные данные:
• шифруемая строка.

Выходные данные:
• гамма;
• зашифрованная строка."
Совсем не понимаю, что от меня хотят
Подскажите, пожалуйста, с чего начать.

Я так поняла, что нужно взять буквы из моей строки, представить их в двоичном коде и сложить с двоичным представлением буквы в новой полученной гамме (массиве).
Но не знаю, как реализовать в программе такое действие: Ввожу строку, и данный массив символов представляется в виде массива индекса данных элементов из массива "Алфавит".
Кто-нибудь знает как это можно реализовать?

Последний раз редактировалось Stilet; 11.12.2011 в 15:28.
Сольвейг вне форума Ответить с цитированием
Старый 11.12.2011, 13:02   #2
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Держите:
Код:
int main()
{
	char stroka[32] = "privet";
	unsigned char gamma = 200;

	//Шифрование
	for (int i = 0; i != strlen(stroka); i++)
	{
		stroka[i] = stroka[i] ^ gamma; //новый код=старый код XOR гамма
	}

	//Сейчас stroka зашифрована

	//Расшифровка
	for (int i = 0; i != strlen(stroka); i++)
	{
		stroka[i] = stroka[i] ^ gamma;
	}

	//Сейчас stroka расшифрована

	return 0;
}
Надеюсь все остальное вы сами без труда сможете реализовать.
(ну а если не разберетесь как засунуть это в функцию, и как реализовать генерацию случайного числа - пишите, помогу)
Цитата:
случайное число
Гуглите на srand и rand.
zotox вне форума Ответить с цитированием
Старый 11.12.2011, 13:19   #3
Сольвейг
Пользователь
 
Регистрация: 10.12.2011
Сообщений: 17
По умолчанию

ОГРОМНОЕ СПАСИБО!!!
Но при отладке выдаёт ошибку:
1>c:\documents and settings\admin\рабочий стол\строки 2\строки 2\строки 2.cpp(7): error C3861: strlen: идентификатор не найден
Сольвейг вне форума Ответить с цитированием
Старый 11.12.2011, 13:22   #4
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Цитата:
strlen: идентификатор не найден
Я поторопился. Добавьте перед int main это:
Код:
#include <string.h>
zotox вне форума Ответить с цитированием
Старый 11.12.2011, 13:28   #5
Сольвейг
Пользователь
 
Регистрация: 10.12.2011
Сообщений: 17
По умолчанию

Простите за наглость, но возможно реализовать программу, чтобы текст вводился с консоли и был любым?
Мои потуги только приводят к ошибке в программе...
Сольвейг вне форума Ответить с цитированием
Старый 11.12.2011, 13:36   #6
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Цитата:
текст вводился с консоли
Код:
#include <iostream>
#include <string.h>

int main()
{
	char stroka[255];
	unsigned char gamma = 200;

	std::cin >> stroka;

	//Шифрование
	for (int i = 0; i != strlen(stroka); i++)
	{
		stroka[i] = stroka[i] ^ gamma; //новый код=старый код XOR гамма
	}

	//Сейчас stroka зашифрована

	//Расшифровка
	for (int i = 0; i != strlen(stroka); i++)
	{
		stroka[i] = stroka[i] ^ gamma;
	}

	//Сейчас stroka расшифрована

	return 0;
}
zotox вне форума Ответить с цитированием
Старый 11.12.2011, 13:49   #7
Сольвейг
Пользователь
 
Регистрация: 10.12.2011
Сообщений: 17
По умолчанию

Большое спасибо!!!

Чтобы я ни вводила, выдаётся комбинация букв "йейейей", это нормально?

Последний раз редактировалось Stilet; 11.12.2011 в 15:35.
Сольвейг вне форума Ответить с цитированием
Старый 11.12.2011, 14:27   #8
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Цитата:
Сообщение от Сольвейг Посмотреть сообщение
Чтобы я ни вводила, выдаётся комбинация букв "йейейей", это нормально?
Покажите свой код. И в каком месте выдается комб. букв "йейейей"?
zotox вне форума Ответить с цитированием
Старый 11.12.2011, 14:36   #9
Сольвейг
Пользователь
 
Регистрация: 10.12.2011
Сообщений: 17
По умолчанию

Код:
#include <iostream>
#include <string.h>

int main()
{
	char stroka[255];
	unsigned char gamma = 200;

	std::cin >> stroka;

	//Шифрование
	for (int i = 0; i != strlen(stroka); i++)
	{
		stroka[i] = stroka[i] ^ gamma; //новый код=старый код XOR гамма
	
	    std::cout <<stroka[i];
	};

	

	//Сейчас stroka зашифрована

	//Расшифровка
	for (int i = 0; i != strlen(stroka); i++)
	{
		stroka[i] = stroka[i] ^ gamma;
	}

	//Сейчас stroka расшифрована

	return 0;
}
Возможно, вывод результат я неверно написала
Сольвейг вне форума Ответить с цитированием
Старый 11.12.2011, 14:47   #10
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Цитата:
Возможно, вывод результат я неверно написала
Сойдет .
Единственное что уберите ";" после for (){}:
Код:
	for (int i = 0; i != strlen(stroka); i++)
	{
		stroka[i] = stroka[i] ^ gamma; //новый код=старый код XOR гамма
	
	    std::cout <<stroka[i];
	};
А вообще все нормально, зашифрованная строка, таким способом, не обязательно должна показывать какие либо символы.
Цитата:
Чтобы я ни вводила
Честно говоря у меня есть сомнения что при вводе любой строки будет всегда результат "йейейей", результат обязан быть разным.

К примеру когда я ввожу "привет" (без кавычек) то результата "йейей" нету нигде.
zotox вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi ( просмотр доступа + шифрация ) FCSM Помощь студентам 2 25.01.2010 15:18
Шифрация методом гаммирования Last Помощь студентам 4 22.11.2009 11:27
Шифрация Русского Языка (С++/Но помоему не зависит) Balizard Помощь студентам 2 02.05.2009 09:27