Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Шифрование строки / 13 сообщений из 13, страница 1 из 1
13.12.2015, 17:43
    #39126744
ukugyul552465
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шифрование строки
Написал так:
Код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <fstream>
using namespace std;
	int main()
{
	setlocale (0, "");
    
    //Создаём три символьные переменные для ключа, текста и зашифрованного текста
	char *key = new char;
	char *text = new char;
	char *enc_text = new char;
	// Создаём целочисленную переменную для хранения кол-ва символов в тексте и кол-ва символов в ключе
	long long Text_Len = 0;
	long long Key_Len = 0;

	//Считываем данные из key.txt в переменную key
 ifstream F;
	F.open("key.txt", ios::in);
	while (!F.eof())
{
F>>key[Key_Len];
Key_Len = Key_Len + 1;
	}
	F.close();
	//Считываем данные из text.txt в переменную text
		 ifstream F1;
	F1.open("text.txt", ios::in);
	while (!F1.eof())
{
F1>>text[Text_Len];
Text_Len = Text_Len + 1;
	}
	F.close();

    for(int i=0; i<Text_Len; i++)
       {
		   enc_text[i] = text[i]*key[i];
	}
		
	//Записываем данные из переменной enc_text в файл enc_text.txt
		ofstream G;
	G.open("enc_text.txt", ios::out);
	G<<enc_text;
	G.close();


   cout << "Done";
		
	cin.get();
	cin.get();
	return 0;
	}



На вход идут файлы text.txt и key.txt, на выход - enc_text.txt.

Проблема в том, что в ключе должно быть столько же символов, сколько и в тексте.
Не пойму, как сделать, чтобы шифровало нормально: к примеру, чтобы текст abcdef , зашифрованный ключом yui , отличался от зашифрованного ключом yuioo
...
Рейтинг: 0 / 0
13.12.2015, 17:47
    #39126745
ukugyul552465
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шифрование строки
Замена enc_text[i] = text[i]*key[i];
на
enc_text[i] = text[i]**key;
тоже не помогает.
...
Рейтинг: 0 / 0
13.12.2015, 17:49
    #39126746
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шифрование строки
ukugyul552465чтобы текст abcdef, зашифрованный ключом yui, отличался от
зашифрованного ключом yuioo
Насколько отличался? Начиная с четвёртого байта или чтобы там вообще не было ничего общего?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.12.2015, 17:51
    #39126748
ukugyul552465
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шифрование строки
Хоть на сколько-то.
Потому что в данной ситуации у меня что ключ yui, что yuioo - выдают один и тот же зашифрованный текст.
...
Рейтинг: 0 / 0
13.12.2015, 17:54
    #39126749
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шифрование строки
ukugyul552465в данной ситуации у меня что ключ yui, что yuioo - выдают один и тот
же зашифрованный текст.
Это странно, поскольку скомпилированная из этих исходников программа должна падать с
ошибкой Access Violation. Сначала разберись с этим, а потом уже можешь использовать
раздельные счётчики для текста и ключа.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.12.2015, 17:58
    #39126752
ukugyul552465
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шифрование строки
Сделал так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 for(int i=0; i<Text_Len; i++)
       {
		   for (int j = 0; j<8; j++)
		   {
			   enc_text[i] = text[i] ^ key[j];
		   }

	}



Вроде работает, зашифрованный текст разный для длины ключа 5 и 8, но только тут вручную надо вставлять размер ключа пока.
Программа шифрует нормально, но потом при закрытии выскакивает какая-то ошибка.
...
Рейтинг: 0 / 0
13.12.2015, 18:06
    #39126755
ukugyul552465
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шифрование строки
Заменил на
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
for(int i=0; i<Text_Len; i++)
       {
		   for (int j = 0; j<Key_Len; j++)
		   {
			   enc_text[i] = text[i] ^ key[j];
		   }

	}



Теперь нормально шифрует, ошибок нет никаких.
Подставил строку cout << Key_Len; - выдаёт значение, на 1 большее чем длина ключа в key.tst, из-за \0 в конце, вероятно, но на работоспособность не влияет.
...
Рейтинг: 0 / 0
14.12.2015, 02:02
    #39126905
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шифрование строки
авторПроблема в том, что в ключе должно быть столько же символов, сколько и в тексте.
Не пойму, как сделать, чтобы шифровало нормально: к примеру, чтобы текст abcdef, зашифрованный ключом yui, отличался от зашифрованного ключом yuioo

Проверяйте это перед началом вашего шифрования, и всё. Если длины разные, то шифрование производиться не должно.

А что это за шифрование такое ? Я совсем не специалист по теории безопасности, вижу что это симметричное шифрование, но не более. Как оно называется, и зачем вы это делаете ? И вы так просто меняете умножить на XOR
...
Рейтинг: 0 / 0
14.12.2015, 09:31
    #39126976
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шифрование строки
ukugyul552465Заменил на
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
for(int i=0; i<Text_Len; i++)
       {
		   for (int j = 0; j<Key_Len; j++)
		   {
			   enc_text[i] = text[i] ^ key[j];
		   }

	}


Этот код аналогичен такому:
Код: plaintext
1.
2.
3.
4.
for(int i=0; i<Text_Len; i++)
       {
			   enc_text[i] = text[i] ^ key[Key_Len - 1];
	}


т.е. ты последним символом шифруешь.
...
Рейтинг: 0 / 0
14.12.2015, 15:18
    #39127416
ukugyul552465
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шифрование строки
Только начинаю изучать шифрование. Не знаю, что это за шифрование. Просто пытаюсь что-то сделать.
Понял, что шифруется последним символом. Сейчас думаю, как решить.
...
Рейтинг: 0 / 0
14.12.2015, 15:34
    #39127442
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шифрование строки
Применять весь ключ к каждому символу бессмысленно. Надо один символ ключа на один символ текста.
Т.е. так должно быть при ключе в 3 символа
Код: plaintext
1.
2.
3.
4.
5.
6.
enc_text[0] = text[0] ^ key[0];
enc_text[1] = text[1] ^ key[1];
enc_text[2] = text[2] ^ key[2];
enc_text[3] = text[3] ^ key[0];
enc_text[4] = text[4] ^ key[1];
...
...
Рейтинг: 0 / 0
14.12.2015, 15:52
    #39127476
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шифрование строки
ukugyul552465, я тебя прошу не флудить топиками если в этом нет острой необходимости.
...
Рейтинг: 0 / 0
14.12.2015, 16:05
    #39127493
ukugyul552465
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шифрование строки
Dima TПрименять весь ключ к каждому символу бессмысленно. Надо один символ ключа на один символ текста.
Т.е. так должно быть при ключе в 3 символа
Код: plaintext
1.
2.
3.
4.
5.
6.
enc_text[0] = text[0] ^ key[0];
enc_text[1] = text[1] ^ key[1];
enc_text[2] = text[2] ^ key[2];
enc_text[3] = text[3] ^ key[0];
enc_text[4] = text[4] ^ key[1];
...



Смысл понятен, буду делать.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Шифрование строки / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]