Форум программистов, компьютерный форум CyberForum.ru

программа кодирования текста - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
ArtTheft
12 / 12 / 2
Регистрация: 20.02.2010
Сообщений: 55
09.12.2010, 12:55     программа кодирования текста #1
Всем добрый день
Есть такая программа,по кодированию текста в файле, с помощью ключа,который находится в другом файле и сохранение закодированого текста в 3 файл.

Но есть проблема,оно кодирует только первых 10 символов. Бился Бился и все никак не могу найти проблему. Подскажите как сделать так чтобы кодировало весь текст из файла,полностью.
Всем большое спасибо за помощь

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
#undef UNICODE                                                                                                
#include <iostream>                                                                                           
#include <math.h>                                                                                             
#include <fstream>                                                                                            
#include <string.h>                                                                                           
#include <Windows.h>                                                                                                                                                                                  
 
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);                                                                                               
}                                                                                                             
                                                                                                              
int main()                                                                                                    
{                                                                                                             
    SetConsoleTitle("CRYPTO ALGORITM");                                                                          //
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<<"Vvedite pyt k faily>";                                                                             
    cin.getline(FLE,sz);                                                                                      
    cout<<"Vvedite pyt k faily-kly4a>";                                                                             
    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<<"Vvedite pyt kyda soxranyat kodirovanii text>";                                                                    
    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<<"Vvedite pyt k faily s zakodirovannim textom>";                                                                             
    cin.getline(_FLE,sz);                                                                                     
    cout<<"Vvedite pyt k faily-kly4a>";                                                                            
    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<<"Vvedite pyt kyda soxranyat razkodirovanii text>";                                                                     
    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;                                                                                                
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.12.2010, 13:11     программа кодирования текста #2
C++
1
dBUF_ = dBUF;
так нельзя делать, в dBUF_ указатель на память, из-за этого он потеряется

C++
1
_dBUF_ = dBUF_;
аналогично

C++
1
int * buf = (int*)malloc(strlen(str)*5);
эта строка не учитывает длину одного int элемента

ещё в функции code() очень много раз вычисляется длина str через strlen()
нужно вычислить один раз и это вычисленное значение везде использовать, чтобы не делать лишних операций всё время

C++
1
2
3
    free(buf);                                                                                                
    return cde;                                                                                               
    free(cde);
тоже неправильно, после return ничего не может стоять, так как никогда не выполнится
это наблюдается в обеих функциях

зачем в разных функциях делать разные имена переменных
переменные внутри одной функции касаются только этой функции, другие функции их не видят, поэтому во всех функциях можно использовать одни и те же имена
ArtTheft
12 / 12 / 2
Регистрация: 20.02.2010
Сообщений: 55
09.12.2010, 13:16  [ТС]     программа кодирования текста #3
Оу...много ошибок.
А подскажите как их исправить. Хотя бы,что касаеться количества кодируемых файлов и вычисление длины str через strlen()
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.12.2010, 13:20     программа кодирования текста #4
C++
1
dBUF_ = dBUF;
C++
1
strcpy(dBUF_, dBUF);
C++
1
text = buff;
C++
1
strcpy(text, buff);
и дальше такие же

C++
1
2
3
4
    while(fgets(dBUF_,255,_pSALT))                                                                            
    {                                                                                                        
        _dBUF_ = dBUF_;                                                                                       
    }
кстати, вообще всё построение цикла неправильное
что он делает, записывает в одну строку, перезаписывая то, что там было ?
ArtTheft
12 / 12 / 2
Регистрация: 20.02.2010
Сообщений: 55
09.12.2010, 13:25  [ТС]     программа кодирования текста #5
Я эту программку на этом же форуме и нашел
Вот ссылка
http://www.cyberforum.ru/cpp-beginne...tml#post492241
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.12.2010, 13:29     программа кодирования текста #6
надо было обратить внимание на goto и искать другую

потому что это всё ещё не так заметно, то, что я здесь описал, а вот то, что перемешаны два языка - это на поверхности
он юзает cin.getline(), а потом тут же юзает fgets(), не зная, что getline() - это и есть цппшный fgets()
ArtTheft
12 / 12 / 2
Регистрация: 20.02.2010
Сообщений: 55
09.12.2010, 13:34  [ТС]     программа кодирования текста #7
Спасибо большое за помощь
Но,все таки вы можете подсказать,как исправить код,так чтобы программа кодировала весь текст.
Мне вот это главное,для начала,а все остальное второстепенное.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.12.2010, 13:46     программа кодирования текста #8
думаешь она правильно кодирует ?
нет уверенности, что он правильно выделяет память
то, как он выделяет, больше похоже на хаос
также он неправильно читает из файла

то, что он их не проверяет, открылись ли они - это ещё семечки

C++
1
2
    ofstream out_file(CFLE);
    FILE * Load2F = fopen(CFLE,"w");
это вообще бред, out_file потом нигде не используется и переоткрывается повторно
ArtTheft
12 / 12 / 2
Регистрация: 20.02.2010
Сообщений: 55
09.12.2010, 13:48  [ТС]     программа кодирования текста #9
И я кстате еще нашел в чем причина кодирования определенного количества букв. Потому что программа считывает количество символов в файле ключе. Чем больше символов тем больше символов в закодированном тексте
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2010, 13:53     программа кодирования текста
Еще ссылки по теме:

C++ Программа кодирования и декодирования
Составить программу для кодирования некоторого текста до 50 символов, заменяя каждую букву на пятую после нее букву из а C++
C++ Программа для перевода текста

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.12.2010, 13:53     программа кодирования текста #10
такие вещи не должны базироваться на strlen(), fgets()
strlen() ориентируется по нуль-символу, который может быть в тексте, если кодируемый файл бинарный, а fgets() будет читать построчно, что тоже не нужно, так как читать надо блоками
это касается и исходного текста и ключа, который также может быть с любыми символами
Yandex
Объявления
09.12.2010, 13:53     программа кодирования текста
Ответ Создать тему
Опции темы

Текущее время: 14:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru