Цитата(tommy256 @ 28.11.2007, 23:33) | Хай всем, пишу прогу для шифрования файлов методом 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); //Зачем 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 я могу и ошибаться...
|
У тебя и так бинарный.
Цитата | Или дайте исходник, шифрования дешифрования файлов на С, очень надо ребята...
|
Возьми: ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-1.4.7.tar.bz2
Вот твой исходник (исправленный):
Код | #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); }
|
|