Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.98/40: Рейтинг темы: голосов - 40, средняя оценка - 4.98
 Аватар для KaRaNTiN
44 / 44 / 11
Регистрация: 10.06.2009
Сообщений: 311
Записей в блоге: 2

Кодирование текста с одного файла и запись в другой

10.01.2010, 14:11. Показов 8748. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!... Написал программу, которая должна брать текст в документе "1.txt", кодировать его и записывать в документ "2.txt". Всё работает, но кодирует как-то не правильно. Надо чтобы символ шифруемого текста смещался на 3 позиции в алфавите. Вот пример программы:

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
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
 
long filesize (FILE *stream);
int i=0;
int y=0;
int x=0;
int j=0;
int k=0;
int n=3;
 
int main (void)
{
clrscr();
long filesize(FILE *stream);
FILE *stream, *fout;
char alf[]="abcdefghijklmnopqrstuvwxyz";
char msg[99];
stream=fopen("1.txt","r");
fout=fopen("2.txt","w");
 
char pasOK[99];
i=0;
k=0;
while (!feof(stream))
 {
 msg[k]=fgetc(stream);
 cout<<msg[k];
 k++;
 }
n=3;
for(j=0; j<k-1;j++)
 {
 for(y=0;y<26;y++)
  {
  if(msg[j]==alf[y])
   {
   y=j+3;
   break;
   }
  }
  if(y>26)
  y=y-26;
  if(y<0)
  y=abs(y);
  pasOK[j]=alf[y];
 }
cout<<pasOK;
 
fwrite(pasOK,k,1,fout);
fclose(stream);
getch();
}
 
long filesize (FILE *stream)
{
long curpos, length;
curpos=ftell(stream);
fseek(stream, 0L, SEEK_SET);
length=ftell(stream);
fseek(stream, curpos,SEEK_SET);
return length;
}
В документе "1.txt" имеется имя "Andrey". Соответственно в документе "2.txt" должно быть следующее: "dqguhb", но программа кодирует так, что получается: "efghi:"... Может кто знает где ошибка в коде, убедительная просьба, сообщите, пожалуйста! =)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.01.2010, 14:11
Ответы с готовыми решениями:

Считывание текста с файла, кодирование, запись в другой файл
Помогите написать прогу которая считывает текст с файла(ну к примеру a.in), кодирует его в другой текстовый файл(b.out)

Запись текста в файл, чтение текста из файла, перепись текста из одного файла в другой файл
Составить программу, в которой организованы следующие действия: запись текста в файл, чтение текста из файла, перепись текста из...

Из одного файла переместить текст в другой файл с заменой текста на другой
Помогите нужно сделать вот такую вещь заготовка есть но не могу осмыслит как сделать вот это: Надо из одного файла переместить текст в...

33
 Аватар для KaRaNTiN
44 / 44 / 11
Регистрация: 10.06.2009
Сообщений: 311
Записей в блоге: 2
20.01.2010, 18:22  [ТС]
Студворк — интернет-сервис помощи студентам
Немного прошло времени, как чайник снова допустил ошибку в коде...

Алгоритм RSA. Пользователь вводит с клавиатуры число p, q. Затем по формуле программа считает значения n, m. Пользователь вводит число d, которое взаимно просто с числом m.. Затем по формуле высчитывется число е. Затем программа должна кодировать содержимое файла "1.txt" по формуле Y=Xemod n. (Х в степени е).. Где Х - позиция шифруемого символа. Зашифрованное слово записывается в документ "3.txt" Т.е. задача почти такая же как и в предыдущей программе, только формула другая.

Сначала я возвожу в степень pow(i,e), а затем нахожу остаток от деления (%n). Программа по формуле шифрует абсолютно правильно. Но не правильно определяет местоположение символа)...

Смотрите: слово "andrey"должно зашифровываться как "aeexzp", а получается "atbdfe".. Опять-таки, прошу Вас помочь обнаружить ошибку в программе. Как понимаю ошибочка где-то в цикле while =) Но где не знаю)

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
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
 
int main (void)
{
clrscr();
 
FILE *stream, *fout;
int p;
int q;
int n;
int m;
int e;
int d;
int y;
int x;
int i;
int c;
char alf[]="abcdefghijklmnopqrstuvwxyz";
char msg;
 
 
stream=fopen("1.txt","r");
fout=fopen("3.txt","w");
 
cout<<"Vvedite p"<<endl;
cin>>p;
cout<<"Vvedite q"<<endl;
cin>>q;
n=p*q;
cout<<"N = "<<n<<endl;
m=(p-1)*(q-1);
cout<<"M = "<<m<<endl;
cout<<"Vvedite d"<<endl;
cin>>d;
e=(1+m)/d;
cout<<"E = "<<e<<endl;
 
while ((msg=fgetc(stream)) !=EOF)
 {
  for(i=0; i<26;i++)
  {
   if(msg==alf[i])
   {
    c=pow(i,e);
    y=c%n;
   if(y>26)
   msg=alf[y-26];
   else
   msg=alf[y];
    break;
   }
  }
 
  cout<<msg;
  fputc(msg, fout);
 }
 
 fclose(stream);
 fclose(fout);
 return 0;
 getch();
}
0
 Аватар для VAN32
28 / 28 / 4
Регистрация: 18.11.2009
Сообщений: 92
20.01.2010, 18:41
Алгоритм шифрования
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
128
129
130
131
132
133
134
135
//************************************************************************************************************//
//  SET-[F]                                       Coded by Ins3t                                      (c)2009 //
//************************************************************************************************************//
//                                                                                                            //
//-------------------------------------------------[INCLUDES]-------------------------------------------------//
#undef UNICODE                                                                                                //
#include <iostream>                                                                                           // 
#include <math.h>                                                                                             //
#include <fstream>                                                                                            //
#include <string.h>                                                                                           //
#include <Windows.h>                                                                                          //                                                                                         //
//------------------------------------------------[/INCLUDES/]------------------------------------------------//
//                                                                                                            //
//-------------------------------------------------[FUNCTIONS]------------------------------------------------//
using namespace std;                                                                                          //
#define sz 1024                                                                                               //
char * code(char * str,char * salt)                                                                           //
{                                                                                                             //
    int s = strlen(str);                                                                                      //
    int i = 0;                                                                                                //
    int * buf = (int*)malloc(strlen(str)*5);                                                                  //
    char * cde = (char*)malloc(1024*1024*10);                                                                 //
    while(i != s)                                                                                             //
    {                                                                                                         //
        buf[i] = (((int)str[i]) ^ ((int)salt[i])*(int)pow((double)strlen(str),3)*((int)salt[i]));             //
        cde[i] = (char)buf[i];                                                                                //
        i++;                                                                                                  //
        cde[s+1] = 0x00;                                                                                      //
    }                                                                                                         //
    free(buf);                                                                                                //
    return cde;                                                                                               //
    free(cde);                                                                                                //
}                                                                                                             //
char * dcode(char * _str,char * _salt)                                                                        //
{                                                                                                             //
    int _s = strlen(_str);                                                                                    //
    int _i = 0;                                                                                               //
    int * _buf = (int*)malloc(strlen(_str)*5);                                                                //
    char * _cde = (char*)malloc(1024*1024*10);                                                                //
    while(_i != _s)                                                                                           //
    {                                                                                                         //
        _buf[_i] = (((int)_str[_i]) ^ ((int)_salt[_i])*(int)pow((double)strlen(_str),3)*((int)_salt[_i]));    //
        _cde[_i] = (char)_buf[_i];                                                                            //
        _i++;                                                                                                 //
        _cde[_s+1] = 0x00;                                                                                    //
    }                                                                                                         //
    free(_buf);                                                                                                  //
    return _cde;                                                                                              //
    free(_cde);                                                                                               //
}                                                                                                             //
//------------------------------------------------[/FUNCTIONS/]-----------------------------------------------//
                                                                                                              //
int main()                                                                                                    //
{                                                                                                             //
    SetConsoleTitle("SET-[F] CRYPTO ALGORITM");                                                               //
    cout<<"[+]--------------------------------------------------------------------------[+]";                 //         
    cout<<"[+] SET-[F]                       Coded by Ins3t                     (C)2009 [+]";                 //
    cout<<"[+]--------------------------------------------------------------------------[+]\n";               //
loop:                                                                                                         //
    cout<<"Code / Decode>";                                                                                   //
    char Code[1024];                                                                                          //
    cin.getline(Code,sz);                                                                                     //
    if(strncmp(Code,"Code",sz) == 0)                                                                          //
    {                                                                                                         //
    //   Code                                                                                                 //
    char * text = (char*)malloc(1024*1024*10);                                                                //
    char * buff = (char*)malloc(1024*1024*10);                                                                //
    char * dBUF_ = (char*)malloc(1024*1024*10);                                                               //
    char FLE[1024];                                                                                           //
    char CFLE[1024];                                                                                          //
    char SALT[1024];                                                                                          //
    char dSALT[1024];                                                                                         //
    char dBUF[1024];                                                                                          //
    cout<<"Enter patch to text>";                                                                             //
    cin.getline(FLE,sz);                                                                                      //
    cout<<"Enter patch to SALT>";                                                                             //
    cin.getline(SALT,sz);                                                                                     //
    FILE * pSALT = fopen(SALT,"r");                                                                           //
    while(fgets(dBUF,255,pSALT))                                                                              //
    {                                                                                                         //
        dBUF_ = dBUF;                                                                                         //
    }                                                                                                         //
    FILE * LoadF = fopen(FLE,"r");                                                                            //
    while(fgets(buff,255,LoadF))                                                                              //
    {                                                                                                         //
        text = buff;                                                                                          //
    }                                                                                                         //
    cout<<"Enter patch to seved codefle>";                                                                    //
    cin.getline(CFLE,sz);                                                                                     //
    ofstream out_file(CFLE);                                                                                  //
    FILE * Load2F = fopen(CFLE,"w");                                                                          //
    if(Load2F != NULL)                                                                                        //
    {                                                                                                         //
        fputs(code(text,dBUF_),Load2F);                                                                       //
        fclose(Load2F);                                                                                       //
    }                                                                                                         //
    }                                                                                                         //
    else if(strncmp(Code,"Decode",sz) == 0)                                                                   //
    {                                                                                                         //
    //    Decode                                                                                              //
    char * _text = (char*)malloc(1024*1024*10);                                                               //
    char * _buff = (char*)malloc(1024*1024*10);                                                               //
    char * _dBUF_ = (char*)malloc(1024*1024*10);                                                              //
    char _FLE[1024];                                                                                          //
    char _CFLE[1024];                                                                                         //
    char _SALT[1024];                                                                                         //
    char dBUF_[1024];                                                                                         //
    cout<<"Enter patch to code>";                                                                             //
    cin.getline(_FLE,sz);                                                                                     //
    cout<<"Enter patch to SALT>";                                                                             //
    cin.getline(_SALT,sz);                                                                                    //
    FILE * _pSALT = fopen(_SALT,"r");                                                                         //
    while(fgets(dBUF_,255,_pSALT))                                                                            //
    {                                                                                                         //
        _dBUF_ = dBUF_;                                                                                       //
    }                                                                                                         //
    FILE * _LoadF = fopen(_FLE,"r");                                                                          //
    while(fgets(_buff,255,_LoadF))                                                                            //
    {                                                                                                         //
        _text = _buff;                                                                                        //
    }                                                                                                         //
    cout<<"Enter patch to seved decode>";                                                                     //
    cin.getline(_CFLE,sz);                                                                                    //
    ofstream out_file(_CFLE);                                                                                 //
    FILE * _Load2F = fopen(_CFLE,"w");                                                                        //
    if(_Load2F != NULL)                                                                                       //
    {                                                                                                         //
        fputs(dcode(_text,_dBUF_),_Load2F);                                                                   //
        fclose(_Load2F);                                                                                      //
    }                                                                                                         //
    }                                                                                                         //
    goto loop;                                                                                                //
    return 0;                                                                                                 //
}                                                                                                             //
//***************************
0
 Аватар для KaRaNTiN
44 / 44 / 11
Регистрация: 10.06.2009
Сообщений: 311
Записей в блоге: 2
20.01.2010, 19:11  [ТС]
VAN32, спасибо Вам конечно же за приложенные усилия в написании программы, но мне надо намного проще, что-то типо меня. Желательно конечно же найти ошибку у меня в коде).. + язык программирования С, а не С++ =) Смотрю на код и он напоминает C# или C Builder =))
0
 Аватар для kazak
3606 / 2746 / 356
Регистрация: 11.03.2009
Сообщений: 6,317
20.01.2010, 20:13
Попробуй 49 строку заменить на y=c*n;
0
 Аватар для KaRaNTiN
44 / 44 / 11
Регистрация: 10.06.2009
Сообщений: 311
Записей в блоге: 2
20.01.2010, 20:16  [ТС]
Цитата Сообщение от kazak Посмотреть сообщение
Попробуй 49 строку заменить на y=c*n;
Нее)..Вообще ничего не получается).. Получаются в ответе какие-то квадратики)).. с%n - находит остаток от деления с на n =)
0
 Аватар для kazak
3606 / 2746 / 356
Регистрация: 11.03.2009
Сообщений: 6,317
20.01.2010, 20:36
берутся два достаточно больших простых числа p и q и вычисляется их произведение n = p*q; n называется модулем.
Предположим, Алиса хочет послать Бобу сообщение M. Алиса создает зашифрованный текст С, возводя сообщение M в степень e и умножая на модуль n: C = M**e* (mod n), где e и n – открытый (public) ключ Боба
RSA
Вот еще про RSA
1
 Аватар для KaRaNTiN
44 / 44 / 11
Регистрация: 10.06.2009
Сообщений: 311
Записей в блоге: 2
20.01.2010, 20:37  [ТС]
Цитата Сообщение от kazak Посмотреть сообщение
спасибоо).. Поюзаем завтра))
0
6 / 6 / 0
Регистрация: 31.12.2009
Сообщений: 132
21.01.2010, 00:10
У меня курсак по RSA был..... Но там намного больше кода, так как он работает з большими числами, и еще много всяких наворотов.............................

если я шифровал текстовую информацию, я менял символ на две цифры, если я шифровал бин файлы - я менял символ на аски код со знаком + или -.............

шифрование даст тебе число от 0 до n, как ты собираешься его поменять печатный на символ(0..255)??? - это бред, потому - что ты потом не сможеш его верно расшифровать.... выводи цифры на экран...

e=(1+m)/d; - неверно, e=(1+km)/d;, где к - такое целое, при котором е тоже будет целым....
у тебя e округляеться, так-как тип int.... может (1+m)/d будет равно 13.25423, а е==13.... а это нарушает условия работы криптосистеммы... почитай вики и какую-то книжку.....

P.S. я тоже думал что RSA легенький алгоритм, но не все так просто.
1
 Аватар для KaRaNTiN
44 / 44 / 11
Регистрация: 10.06.2009
Сообщений: 311
Записей в блоге: 2
21.01.2010, 18:28  [ТС]
Спасибо, Вам ребята, большое).. НО мне не надо наворотов разных, типа "проверка простое ли число введено", "взаимно ли простые числа" и т.п.).. Надо чтобы просто по формуле алгоритма RSA программа кодировала сообщения).. Всё-таки не для NASA пишу программу, а обычную лабораторную работу).. Навороты потом сам уже поюзаю и сделаю)..

Мне надо простенько, дабы кодировало).. Но вот пока ошибочка).. Я не могу понять, как символы в файле преобразовать в циферки, типа А=1, В=2, С=3 и т.д. =) Если кто может подсказать, подскажите, пожалуйста)...
0
6 / 6 / 0
Регистрация: 31.12.2009
Сообщений: 132
21.01.2010, 18:54
если txt файл - можно каждый символ менять на две цифры A=10,B=11,....я=80,"."=99
создай два масива например - в одном буквы, цифры знаки препенания, а в другом двузначные числа....
char symb[]={'A','Б',.............};
byte numb[]={10,11,12,.........};

прочитал символ с файла, нашел его в symb и поменял на соответственное число c numb...
шифрование
потом если зашифрованое число <=255 печатаешь на экран, если больше - просто выводишь число.

а так я не слышал чтобы зашифрованые на РСА файлы сохранялись как печатные символы.... - либо цифры, либо бин-файл
0
 Аватар для KaRaNTiN
44 / 44 / 11
Регистрация: 10.06.2009
Сообщений: 311
Записей в блоге: 2
21.01.2010, 19:09  [ТС]
Цитата Сообщение от 22dr22 Посмотреть сообщение
а так я не слышал чтобы зашифрованые на РСА файлы сохранялись как печатные символы.... - либо цифры, либо бин-файл
Посмотри мой код программы))..При компиляции программы, на экран выводятся циферки, а в текстовом документе сохраняется уже преобразованный из циферок текст) =) ВотЪ так вотЪ.. Вот только проблема в том, что в предыдущей программе программа нормально определяла положение символа (без сравнения символа с цифрой), то тут возникли небольшие проблемы). Вот я и не понимаю почему). .Спасибо за совет про сравнения массивов, проверю)
0
6 / 6 / 0
Регистрация: 31.12.2009
Сообщений: 132
21.01.2010, 19:26
скомпилил твой код в 1.тхт - andrey
вводил 7
11
13
на экране - a e2z
файл 3.тхт - a[непечатный]e2z[непечатный]

в чем проблемма???

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
while ((msg=fgetc(stream)) !=EOF)
 {
  for(i=0; i<26;i++)
  {
   if(msg==alf[i])
   {
    c=pow(i,e);
    y=c%n;
  // if(y>26)
  msg=y;
  // else
 //  msg=alf[y];
    break;
   }
  }
 
  cout<<(int)msg<<" ";
  fputc(msg, fout);
 }
вот выводит цифры
0
 Аватар для KaRaNTiN
44 / 44 / 11
Регистрация: 10.06.2009
Сообщений: 311
Записей в блоге: 2
21.01.2010, 19:29  [ТС]
Цитата Сообщение от 22dr22 Посмотреть сообщение
скомпилил твой код в 1.тхт - andrey
вводил 7
11
13
на экране - a e2z
файл 3.тхт - a[непечатный]e2z[непечатный]

в чем проблемма???
мм).. Ну при числах 3, 11, 7 текст в 3.тхт вполне нормальный)..м-да..Что-то я не подумал другие числа попроверять).... Интересно).. Что при этих цифрах выводятся нормальные символы, а при других - какие-то каракули после первого).. Тогда завтра попрошу преподавателя помочь)

Цифры у меня выводило когда я просто ставил cout<<y; =). .Ну в общем да ладно).. Спасибо за полезнейшие советы! Дальше попытаюсь разобраться сам)
0
6 / 6 / 0
Регистрация: 31.12.2009
Сообщений: 132
21.01.2010, 19:32
//////////////////////

печатные символы system - от 0х21==33 к 0xFF==255
а у тебя выходит 0 71 4 53 25 60

Добавлено через 2 минуты
или ты что-то з ТЗ завтыкал, или твой препод не очень компетентный в криптографии.....
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.01.2010, 19:32

Запись из одного файла в другой
#include &quot;stdafx.h&quot; #include &lt;windows.h&gt; #include &lt;iostream&gt; #include &lt;stdio.h&gt; using namespace std; void Text5(char...

Запись из одного файла в другой
Доброго времени суток! ребят, вот такой вопрос :) походу я где то накосячил с проверкой, можете глянуть?) смысл всего этого, есть...

Запись из одного файла в другой
Так я вывожу содержимое файла1, как его записать в файл2? Основная задача: если размер файла больше какого-то числа, то содержимое...

Считывание из одного файла и запись в другой
Переделать злополучную программу с процедурами , чтобы считывались данные из исходного файла , а результат записывался , соответственно, в...

Перенос текста с одного файла в другой
Нужно перенести текст с одного файла в другой, и чтобы каждая строка была нумеровоной типа: input file : maksim ilya mama ...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru