Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шифр на Си 
:(
    Опции темы
tommy256
Дата 28.11.2007, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.11.2007

Репутация: нет
Всего: нет



Хай всем, пишу прогу для шифрования файлов методом XOR, там алгоритм шифрования и дешифрования одинановый,я так понял.... вот ниже прога, шифрует нормально, а дешифровать не могу, то есть я пишу,  из файла 1.txt  в  шифровать в файл 2.txt.а при дешифровании пишу наоборот, из файла 2.txt в файл 3.txt. не дешифрует....ПОмогите плиз
Код

#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<dos.h>
void main()
 {
char * s=(char*) malloc (sizeof(char)*80);
char z,c,ch;
char data[6];
char res[50];
int k,i,j,a,q,y;
 printf("\n Vvedite imya faila wufr/dewufr");
gets(s);
FILE*f1=fopen(s,"br");
printf("\n kyda wufrovat'/dewufr ?");
gets(s);
printf("\n Please Enter password");
for (i=1;i<7;i++)  // на экране отображаются звёздочки и пароль записал в массив
{ ch=getche();
data[i-1]=ch;
printf("\b*");
}
FILE*f2=fopen(s,"bw");
 a=0;
while ((c=fgetc(f1))!=EOF)   // количество байт в файле
{
a++;
k=a; }


 for (q=0,j=0;q<6,j<k;q++)      // Алгоритм XOR

{ c=fgetc(f1);
 res[j]=c^data[q];
 fputc(res[j],f2);
j++;}
printf("\n Finished");
 fclose(f1);
fclose(f2);
                 }


Это сообщение отредактировал(а) tommy256 - 29.11.2007, 11:14
PM MAIL ICQ   Вверх
MAKCim
Дата 28.11.2007, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



tommy256

M
MAKCim
Модератор: Используйте тег код!


Это сообщение отредактировал(а) MAKCim - 28.11.2007, 23:36


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
likehood
Дата 28.11.2007, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 8
Всего: 24



Цитата(tommy256 @  29.11.2007,  00:33 Найти цитируемый пост)
while ((c=fgetc(f1))!=EOF)

при работе с двоичным файлом значение EOF может встериться раньше, чем ты дойдешь до конца файла.
если хочешь определить размер файла, можешь установить указатель на конец файла функцией fseek(f1, 0, SEEK_END) и считав его функцией ftell(f1).
только не забудь вернуться к началу файла - fseek(f1, 0, SEEK_SET). кстати, у тебя та же ошибка - ты доходишь до "конца" фала f1 и продолжаешь читать данные с этого же места.
PM MAIL   Вверх
tommy256
Дата 29.11.2007, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.11.2007

Репутация: нет
Всего: нет



А лучше работать в текстовом режиме или в бинарном? + если в бинарном режиме то вместо putc, getc будут другие функции, помоему, типо fwrite, fread я могу и ошибаться...
2 likehood Можешь дать асю, надо обсудить smile
Или кто может помочь, напишите в аську 386210191
P.S. Модератор напиши в личку что за тэг надо было написать ? 

Это сообщение отредактировал(а) tommy256 - 29.11.2007, 01:02
PM MAIL ICQ   Вверх
tommy256
Дата 29.11.2007, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.11.2007

Репутация: нет
Всего: нет



Или дайте исходник, шифрования дешифрования файлов на С, очень надо ребята...
PM MAIL ICQ   Вверх
xvr
Дата 29.11.2007, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(tommy256 @ 28.11.2007,  23:33)
Хай всем, пишу прогу для шифрования файлов методом XOR, там алгоритм шифрования и дешифрования одинановый,я так понял.... вот ниже прога, шифрует нормально, а дешифровать не могу, то есть я пишу,  из файла 1.txt  в  шифровать в файл 2.txt.а при дешифровании пишу наоборот, из файла 2.txt в файл 3.txt. не дешифрует....ПОмогите плиз

Распечатай свой исходник, повесь на стену и подпиши - ТАК ПИСАТЬ НЕЛЬЗЯ!

Цитата

Модератор: Используйте тег код!

Он у него стоит smile

Код

#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<dos.h>  // Зачем?
void main()
 {
   char * s=(char*) malloc (sizeof(char)*80);  //Зачем malloc ???
   char z,c,ch;
   char data[6];
   char res[50];
   int k,i,j,a,q,y;
   printf("\n Vvedite imya faila wufr/dewufr");
   gets(s);
   FILE*f1=fopen(s,"br");
   printf("\n kyda wufrovat'/dewufr ?");
   gets(s);
   printf("\n Please Enter password");
   for (i=1;i<7;i++)  // на экране отображаются звёздочки и пароль записал в массив
    {
     ch=getche();
     data[i-1]=ch;
     printf("\b*");
   }
  FILE*f2=fopen(s,"bw");

  a=0;
  while ((c=fgetc(f1))!=EOF)   // количество байт в файле
   {
    a++;
    k=a; // Зачем? Почему не использовать просто a
  }
// Промотал файл до конца, потом продолжил чтение - будут читаться одни -1!

 for (q=0,j=0;q<6,j<k;q++)      // Алгоритм XOR
// Не понял конструкцию q<6,j<k ? 
  {
   c=fgetc(f1);
   res[j]=c^data[q];
// Проксорил твой файл (точнее -1) с первыми 6ю байтами массива data, и далее по все памяти после него
   fputc(res[j],f2);
// А так же убил все, что лежит за пределами res после 50го обработанного байта
   j++;
 }
 printf("\n Finished"); // Это точно - finish, причем полный!
 fclose(f1);
 fclose(f2);
}


Цитата

А лучше работать в текстовом режиме или в бинарном? + если в бинарном режиме то вместо putc, getc будут другие функции, помоему, типо fwrite, fread я могу и ошибаться...

У тебя и так бинарный.

Цитата

Или дайте исходник, шифрования дешифрования файлов на С, очень надо ребята...

Возьми: Исходник шифрования smile

Вот твой исходник (исправленный):

Код

#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
void main()
{
   char s[80];
   char data[6];
   int i,j,c;

   printf("Vvedite imya faila wufr/dewufr");
   gets(s);
   FILE*f1=fopen(s,"br");
   printf("\n kyda wufrovat'/dewufr ?");
   gets(s);
   printf("\n Please Enter password");
   for (i=0;i<6;i++)  // на экране отображаются звёздочки и пароль записал в массив
    {
     ch=getch();
     if (ch=='\r' || ch=='\n') break;
     data[i]=ch;
     printf("*");
   }
  printf("\n"); 
  FILE*f2=fopen(s,"bw");

  j=0;
  while ((c=fgetc(f1))!=EOF) 
   {
    fputc(c^data[(j++)%i],f2);
   }
  printf("Finished\n");
  fclose(f1);
  fclose(f2);
}





PM MAIL   Вверх
tommy256
Дата 29.11.2007, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.11.2007

Репутация: нет
Всего: нет



to xvr: Respect и уважуха smile 
НО если открывать файл в бинарном режиме, то вместо fputc - fwrite, fgetc - fread, я писал выше, но я поставил в текстовый режим, шифрует текст, и расшифровует!
А можно шифровать рисунки, и другие файлы? Одного бинарного режима думаю мало... 
PM MAIL ICQ   Вверх
xvr
Дата 29.11.2007, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(tommy256 @ 29.11.2007,  18:18)
to xvr: Respect и уважуха smile 
НО если открывать файл в бинарном режиме, то вместо fputc - fwrite, fgetc - fread, я писал выше, но я поставил в текстовый режим, шифрует текст, и расшифровует!

fputc и fgetc будут работать и в бинарном режиме, собственно у тебя файлы изначально и открывались в бинарном режиме. Текст так шифровать тоже можно.

Цитата

А можно шифровать рисунки, и другие файлы? 

Можно

Цитата

Одного бинарного режима думаю мало...

Вполне достаточно

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0857 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.