С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
sizare
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 9
1

Поправьте мой код (шифратор файлов)

22.12.2013, 17:08. Просмотров 715. Ответов 10
Метки нет (Все метки)

Задача: сделать шифратор файлов на основе побайтового копирования с паролем

вот, что у меня получилось: все работает, но только с текстовыми файлами.

Как сделать, чтобы работало со всеми типами файлов?

через функцию fread- не получается

вот мой код:

C++
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
#include <stdio.h>
#include <locale>
#include <conio.h>
#include <fstream>
#include <iostream>
 
int main(){
 
FILE *def = fopen("55.txt", "rb"); //исходный файл
FILE *shifr = fopen("55-1.txt", "wb"); //копированный (шифрованный) файл
 
int d = 0;
char x[100];
printf("Vvedi pass: ");
scanf("%s", &x);
 
//создаем ключ из пароля, его будем прибавлять к каждому байту исходного файла
int key = 0;
for(int i =0; i<strlen(x); i++)
{
key+=(unsigned int)x[i];
}
 
int c = 0; 
 
while ((c = fgetc(def)) != EOF)
{
//к каждому байту прибавялем ключ, для того чтобы значение не выходило за пределы байта берем остаток от деления на 255
c=(c+key)%255;
 
printf("%d\n", c);
 
fprintf(shifr, "%c", c); //вывод файла `
}
 
_getch();
 
fclose(def);
fclose(shifr);
}
Добавлено через 47 минут
Сколько ни пробую - не получается чтобы шифровал например jpeg

Добавлено через 59 минут
Что, никно не знает C++?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2013, 17:08
Ответы с готовыми решениями:

Поправьте пожалуйста мой калькулятор
Доброго вечера. Такая проблема. Завтра в универ нужно сдать калькулятор,...

Поправьте Код
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;time.h&gt; #include &lt;stdlib.h&gt;...

Поправьте код
Снова где то портачу и не знаю где, поправьте кому не сложно #include...

Поправьте код...
Помогите поправить код...не пойму в чем ошибка....программы разложения в ряд...

Поправьте код
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace...

10
gazlan
3143 / 1920 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
22.12.2013, 17:36 2
C++
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
#define ASCII_SIZE         (256)
 
int main(int argc,char** argv)
{
   char     pszTemp[MAX_PATH];
 
   FILE*    pSrc = fopen(argv[1],"rb");
 
   strcpy(pszTemp,argv[1]);
   strcat(pszTemp,".enc");
 
   FILE*    pDst = fopen(pszTemp,"wb");
 
   BYTE     byKey = 0;
 
   while (*argv[2])
   {
      byKey += *argv[2];
      ++argv[2];
   }
 
   int   iChr = 0; 
 
   while ((iChr = fgetc(pSrc)) != EOF)
   {
      iChr ^= byKey;
 
      fputc(iChr,pDst);
   }
 
   fclose(pSrc);
   fclose(pDst);
 
   return 0;
}
1
sizare
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 9
22.12.2013, 17:44  [ТС] 3
Цитата Сообщение от gazlan Посмотреть сообщение
C++
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
#define ASCII_SIZE         (256)
 
int main(int argc,char** argv)
{
   char     pszTemp[MAX_PATH];
 
   FILE*    pSrc = fopen(argv[1],"rb");
 
   strcpy(pszTemp,argv[1]);
   strcat(pszTemp,".enc");
 
   FILE*    pDst = fopen(pszTemp,"wb");
 
   BYTE     byKey = 0;
 
   while (*argv[2])
   {
      byKey += *argv[2];
      ++argv[2];
   }
 
   int   iChr = 0; 
 
   while ((iChr = fgetc(pSrc)) != EOF)
   {
      iChr ^= byKey;
 
      fputc(iChr,pDst);
   }
 
   fclose(pSrc);
   fclose(pDst);
 
   return 0;
}
Спасибо за старания, но ничего не работает(
0
gazlan
3143 / 1920 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
22.12.2013, 17:55 4
Цитата Сообщение от sizare Посмотреть сообщение
ничего не работает
Работает, причем, в обоих направлениях: и зашифровывает и расшифровывает :-)
0
sizare
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 9
22.12.2013, 18:09  [ТС] 5
Цитата Сообщение от gazlan Посмотреть сообщение
Работает, причем, в обоих направлениях: и зашифровывает и расшифровывает :-)
можете выложить *cpp файл с подключенными библиотеками итд... ? буду премного благодарен ! у меня visual studio..
0
gazlan
3143 / 1920 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
22.12.2013, 18:40 6
Цитата Сообщение от sizare Посмотреть сообщение
*cpp файл с подключенными библиотеками
??

Весь код в #2, никаких библиотек, кроме стандартного Run-time, не требуется.

Расскажите лучше, что вы делаете для того, чтобы у вас это "не работало".
0
sizare
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 9
22.12.2013, 18:42  [ТС] 7
Цитата Сообщение от gazlan Посмотреть сообщение
??

Весь код в #2, никаких библиотек, кроме стандартного Run-time, не требуется.

Расскажите лучше, что вы делаете для того, чтобы у вас это "не работало".
вставляю код в студию, запускаю...

char pszTemp[MAX_PATH]; вместо MAX_PATH должен быть путь к файлу, который я хочу зашифровать?
0
gazlan
3143 / 1920 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
22.12.2013, 18:57 8
Цитата Сообщение от sizare Посмотреть сообщение
вместо MAX_PATH должен быть путь к файлу, который я хочу зашифровать
Нет, разумеется. Ничего в коде менять не требуется (без ясного понимания, по крайней мере).

Имя файла для зашифровки/расшифровки передаете первым параметром командной строки, ключ (строка) - вторым. К имени обработанного файла будет дописано расширение .enc

Если повторно "зашифровать" уже зашифрованный файл с тем же самым паролем, он окажется дашифрованным (по свойству XOR: сложение и вычитание по mod 2 совпадают).
0
sizare
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 9
22.12.2013, 19:20  [ТС] 9
Цитата Сообщение от gazlan Посмотреть сообщение
Нет, разумеется. Ничего в коде менять не требуется (без ясного понимания, по крайней мере).

Имя файла для зашифровки/расшифровки передаете первым параметром командной строки, ключ (строка) - вторым. К имени обработанного файла будет дописано расширение .enc

Если повторно "зашифровать" уже зашифрованный файл с тем же самым паролем, он окажется дашифрованным (по свойству XOR: сложение и вычитание по mod 2 совпадают).
Поправьте мой код (шифратор файлов)

вот сколько ошибок показывает.
т.е вместо argv[1] нужно подставить имя своего файла? (напр fopen("55.txt", "rb"); //исходный файл) ?
0
gazlan
3143 / 1920 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
22.12.2013, 19:35 10
Цитата Сообщение от sizare Посмотреть сообщение
т.е вместо argv[1] нужно подставить имя своего файла
Еще раз: Имя файла задается как аргумент командной строки.

И чтобы не искать, где это в ваших хедерах (MSVC 2010 у меня нет), замените MAX_PATH на число 260, и BYTE на unsigned char.
0
sizare
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 9
22.12.2013, 20:13  [ТС] 11
Цитата Сообщение от gazlan Посмотреть сообщение
Еще раз: Имя файла задается как аргумент командной строки.

И чтобы не искать, где это в ваших хедерах (MSVC 2010 у меня нет), замените MAX_PATH на число 260, и BYTE на unsigned char.
спасибо! наконец-то разобрался как работать!
0
22.12.2013, 20:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2013, 20:13

Поправьте код!!!
Вчера весь вечер сидел, и не мог понять, почему программа выдает какой-то набор...

Поправьте код.
Добрый вечер) не будите ли так любезны помочь с прогой ) нужно чтоб на экране...

Поправьте код
Мне нужно что бы в один файл записало рандомные числа с повторами, а потом из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru