Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 02.01.2012
Сообщений: 22
1

Шифрование. Проблема с чтением и записью файла.

05.01.2012, 21:41. Просмотров 680. Ответов 2
Метки нет (Все метки)


Доброго времени суток. Программа шифрует и расшифровывает файлы с помощью сети Фейстеля. Только начал радоваться, что все работает, как заметил что работает только с маленькими файлами ~22 символа. Не могу понять как заставить ее работать с большими файлами.
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
//---------------------------------------------------------------------------
#include <stdlib.h>
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include "Unit1.h"
#include <iostream.h>
#include <io.h>
#include <conio.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int i,q;
char leftm[5120],rightm[5120];
TStringList *List = new TStringList;
AnsiString Nopen, Nsave ="";
 int p=5;
    char key[5]="31337";
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
OpenDialog1->Execute();
FILE *F;
Nopen=OpenDialog1->FileName.c_str();
Label1->Caption =Nopen;
F=fopen(Nopen.c_str(),"r");
 
        char buf[10240];
        char  rline[84];
        AnsiString st;
        do{
        fgets(rline,84,F);
        st=st+rline;
        if (st.Length()%2!=0)
        st=st+' ';
        q=st.Length();
        if (feof(F)) break;
        if (rline[strlen(rline)-1]== '\n') rline[strlen(rline)-1]=0;
        }while(true);
        fclose(F);
        int j=0;
        for (i=1;i<(q/2);i+=2)
        {
         rightm[j]=st[i];
         leftm[j]=st[i+1];
         j++;
         }
      //   if (i%2 !=0)
 //leftm[i/2+1]=' ';
 
 
 
}
 
void crypto()
{
int temp;
for (int n=0;n<i;n++)
{
 for(int v=0;v<p;v++)
 {
  temp=rightm[n]^(leftm[n]+key[v]);
  rightm[n]=leftm[n];
  leftm[n]=temp;
 }
}
 
}
 
void decrypto()
{
int  temp;
for (int n=0;n<i;n++)
{
 for(int v=p-1;v>=0;v--)
 {
  temp = leftm[n] ^ (rightm[n]+key[v]);
  leftm[n] = rightm[n];
  rightm[n] = temp;
 }
}
 
}
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{ AnsiString tmp="";
crypto();
 
for (int k=0;k<=i/2;k++)
 {
 tmp+=rightm[k];
 tmp+=leftm[k];
 }
 if (SaveDialog1->Execute())
  {Nsave=SaveDialog1->FileName;
  List->Clear();
List->Add(tmp);
 
List->SaveToFile(Nsave);
   }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button3Click(TObject *Sender)
{
AnsiString tmp="";
    decrypto();
  for (int k=0;k<=i/2;k++)
 {
 tmp+=rightm[k];
 tmp+=leftm[k];
 }
 List->Clear();
 List->Add(tmp);
 if (SaveDialog1->Execute())
  {Nsave=SaveDialog1->FileName;
List->SaveToFile(Nsave);
} }
//---------------------------------------------------------------------------
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.01.2012, 21:41
Ответы с готовыми решениями:

Проблема с записью и чтением данных из файла
После записи программой в файл и открытии файла через Sublime Text, получается следующее: æåëåçî...

Шифрование и расшифровка строки с записью/чтением из БД
Доброго времени суток. Необходимо реализовать шифрование строки, и затем ее расшифрование. Данная...

Работа с чтением/записью бинарного файла
Здравствуйте. Хочу создать бинарный файл, туда записать число. Затем его закрыть, заново открыть и...

Задачка с записью и чтением из текстового файла с++
В текстовом файле «In.txt» сохраняются через пробел целые числа. Переписать в новый текстовый...

2
Практикантроп
4668 / 2591 / 493
Регистрация: 23.09.2011
Сообщений: 5,559
05.01.2012, 23:44 2
- по моему мнению - никак. Вы пытаетесь вывести информацию как текстовую, забыв о том, что предварительно её исказили. Вдобавок еще это ограничение на длину rline (84). То-есть "перекрученный" символ может выглядеть, как признак конца файла, и естественно - дальше себя информацию не пустит. Чтобы убедиться, так это - или нет, попробуйте работать с монотонными файлами, где все 200...800 символов одинаковы.
0
0 / 0 / 1
Регистрация: 02.01.2012
Сообщений: 22
08.01.2012, 16:41  [ТС] 3
Цитата Сообщение от nick42 Посмотреть сообщение
- . Вы пытаетесь вывести информацию как текстовую.
правильно, надо работать с бинарными файлами. теперь читается все, шифруется все, а вот с расшифровкой есть еще проблемы
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2012, 16:41

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Проблема с чтением из файла
Подскажите пожалуйста в чем ошибка? Чтения не происходит. Нули в массиве как были, так и остаются....

Проблема с чтением файла
Всем здорова) Хочу написать код который читает xml и другие файлы на java Так почему он у меня не...

Проблема с чтением файла
При открытии файла функцией fopen и выводе на консоль отображается только первая строчка. Я так...

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


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

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

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