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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
seruy-t
2 / 2 / 0
Регистрация: 21.08.2010
Сообщений: 216
#1

0D 0A FF В конце файла после шифрования - C++

06.06.2013, 19:42. Просмотров 1611. Ответов 20
Метки нет (Все метки)

Всем привет. Пишу прогу для шифрования по алгоритму Цезаря. Знаю-знаю, целая туча таких Написал 2 для шифрования и расшифровывания одной буквы. При обработке строк и выводе их на экран проблем вроде бы нет, но когда дело доходит до файлов ... При зашифровании в конце файлов появляются лишние символи 0D 0A FF. А при расшифровывании символи 1А .
Знаю, что 0D 0A это переход на новую строку.
Выяснил, что 1А ставится на месте символов, значения которых были потеряны при передаче

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
char find_and_encr_char(char what_find,int key){
      char engl_abet[26]= {'q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'};
    bool founded= false; // знайдено ?
 
      char encr_char;
      if(what_find==' ') {
          encr_char=' ';
          founded=true;
          return encr_char;
                             }
    if(what_find=='.') {
          encr_char='.';
          founded=true;
          return encr_char;
                             }
 
      for(int i=0;i<26;i++){
 
                int abskey=i+key; 
                            if(engl_abet[i]==what_find){
                                if((i+key)>26){ abskey=(i+key)%26 ; }
                                encr_char=engl_abet[abskey];
                                founded=true;
                                break;
                                                       }
                            }
 
if(founded==false) encr_char=what_find;
                              return encr_char; }
 
char find_and_decr_char(char what_find, int key)
{
 char engl_abet[26]= {'q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'};
 
  if(what_find == ' ')         return ' ';
    if(what_find == '.')         return '.';
 
   for(int i=0;i<26;i++)
   {
      if (what_find == engl_abet[i]){
         if ((i-key) < 0)         return engl_abet[(26 - (-1*(i - key)%26))%26];
         else            return engl_abet[i-key];
   }
   }
}
P.S. Просьба не отсылать на топики с другими реализациями этого алгоритма, я там был хочу доделать именно так так задумал изначально
Миниатюры
0D 0A FF В конце файла после шифрования   0D 0A FF В конце файла после шифрования  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2013, 19:42     0D 0A FF В конце файла после шифрования
Посмотрите здесь:

Алгоритм шифрования из exe файла - C++
Hola amigos! :) На C++ к слову я мало что понимаю и столкнулся с некой необходимостью получить алгоритм шифрования обычного CD-ключа из...

Написать AES, шифрования любого файла .exe. - C++
Есть задача написать AES, который будет зашифровывать и расшифровывать любой файл .exe. Как лучше открывать этот файл, если нужно считывать...

Не понятный дополнительный символ в конце файла - C++
Друзья помогите пож-та разобраться с проблемой. Ниже простой пример посимвольного считывания из файла # include &lt;fstream&gt; # include...

Вставить после каждого слова в предложении запятую, а в конце предложения стоит точка - C++
вставить после каждого слова в предложении запятую, а в конце предложения стоит точка.

Написать программы шифрования и расшифровки файла методом циклического сдвига - C++
Написать программы шифрования и расшифровки файла методом циклического сдвига. Т.е. каждый символ исходного файла (исходный код - K1)...

Как обрезать N байт в конце файла не перезаписывая его? - C++
Как обрезать N байт в конце файла не перезаписывая его?

Удалить ненужную информацию в конце файла, не создавая другой файл - C++
Молжа ли удалить конец файла(удаление ненужной информации в конце файла)? не создавая другой файл. или как нибуть урезать его?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.06.2013, 22:38     0D 0A FF В конце файла после шифрования #16
Может как-то так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char find_and_decr_char(char what_find, int key)
{
    char engl_abet[26] = {'q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'};
 
    //if(what_find == ' ')         return ' ';
    //if(what_find == '.')         return '.';
 
   for(int i = 0; i < 26; i++)
   {
         if (what_find == engl_abet[i])
         {
            if ((i - key) < 0) return engl_abet[(26 - (-1*(i - key)%26))%26];
            else  return engl_abet[i - key];
        }
   }
   return what_find;
}
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
06.06.2013, 22:39     0D 0A FF В конце файла после шифрования #17
0D 0A это символы CR LF
перевод строки, возврат печатной каретки.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.06.2013, 22:40     0D 0A FF В конце файла после шифрования #18
Цитата Сообщение от seruy-t Посмотреть сообщение
А что на счет этого ?
Разобраться нужно. У меня же кода нет перед глазами. Там кусок, здесь кусок. Приходится туда-сюда лазить.
seruy-t
2 / 2 / 0
Регистрация: 21.08.2010
Сообщений: 216
06.06.2013, 22:47  [ТС]     0D 0A FF В конце файла после шифрования #19
alsav22,
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
char find_and_decr_char(char what_find, int key)
{
 char engl_abet[26]= {'q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'};
 
  if(what_find == ' ')         return ' ';
    if(what_find == '.')         return '.';
        if(what_find == '1')         return '1';
            if(what_find == '2')         return '2';
                if(what_find == '3')         return '3';
                    if(what_find == '4')         return '4';
                        if(what_find == '5')         return '5';
                            if(what_find == '6')         return '6';
                                if(what_find == '7')         return '7';
                                    if(what_find == '8')         return '8';
                                        if(what_find == '9')         return '9';
                                            if(what_find == '0')         return '0';
    if(what_find == '!')         return '!';
        if(what_find == '@')         return '@';
            if(what_find == '$')         return '$';
                if(what_find == '%')         return '%';
                    if(what_find == '&')         return '&';
                        if(what_find == '*')         return '*';
                            if(what_find == '(')         return '(';
                                if(what_find == '_')         return '_';
                                    if(what_find == ')')         return ')';
                                        if(what_find == '?')         return '?';
   for(int i=0;i<26;i++)
   {
      if (what_find == engl_abet[i]){
         if ((i-key) < 0)         return engl_abet[(26 - (-1*(i - key)%26))%26];
         else            return engl_abet[i-key];
   }
   }
}

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string read_file(string filename){
    string input_of_file_for_reading="";
    FILE *input_file = fopen(filename.c_str(),"rt");
        if(input_file==NULL)    return "File invalid";
 
        while(true)
        {
         char ch = fgetc(input_file);
         if (ch == EOF) break;
         input_of_file_for_reading += ch;
         }
 
            fclose(input_file);
            return input_of_file_for_reading;
 
}

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
bool write_and_decrypt_file(string filename, string in,int key)
    {
 FILE *file_for_write=fopen(filename.c_str(),"wt");
 if(file_for_write==NULL) return false;
 bool flag=false;
   for(unsigned int i=0;i<in.length();i++){
    if(!fputc((find_and_decr_char(in[i],key)),file_for_write)) flag=true;
    else flag=false;
                                   }
    fclose(file_for_write);
     if(flag==false) return false;
     else return true;
     }
C++
1
2
3
4
5
6
7
8
9
10
11
12
 cout<<"\nEnter the path for saving\n";
                   string output_file;
                   cin>>output_file;
                   cout<<"\nEnter the key\n";
                   int key;
                   cin>>key;
                        if(key<0) {
                                cout<<"Very funny ...";
                                  return 1;
                                  }
                    if((write_and_decrypt_file(output_file,read_file(patch),key))) cout <<"DONE \n";
                    else cout<<"FAIL, error of recording";
Добавлено через 2 минуты
Kuzia domovenok, Это я еще в шапке написал, но спасибо за внимание
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.06.2013, 22:52     0D 0A FF В конце файла после шифрования #20
Вот это:
C++
1
2
3
4
5
...
for(unsigned int i=0;i<in.length();i++){
    if(!fputc((find_and_decr_char(in[i],key)),file_for_write)) flag=true;
    else flag=false;
...
fputc() что возвращает при правильном считывании?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2013, 22:56     0D 0A FF В конце файла после шифрования
Еще ссылки по теме:

Как считать информацию из файла, если в конце стоит пробел? - C++
У меня при считывании из файла в массив, если в конце файла стоит пробел, то копируется ещё один символ (-842…..). Как определить, что в...

Ошибка C1075 в конце файла обнаружен левый непарный фигурная скобка - C++
#include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;clocale&gt; using namespace std; int main() { int a, b, f, i; setlocale(LC_CTYPE,...

Считать текст из файла, добавить в конце каждого предложения, количество вхождений в него заданного слова - C++
Вот задание: Написать программу, которая считывает текст из файла и выводит его на экран, добавляя после каждого предложения, сколько раз...

"4102" в конце файла при записи - C++
Я не программист, я радиофизик, но у меня возникла необходимость написать программу на c++ Суть проблемы: по нажатии на кнопку в файл...

Результат после вывода из файла - C++
Здравствуйте. Есть 3 файла, в каждой 5 строчке находится число, которое надо записать в массив 'arr' и вывести его, вместо цифр...


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

Или воспользуйтесь поиском по форуму:
seruy-t
2 / 2 / 0
Регистрация: 21.08.2010
Сообщений: 216
06.06.2013, 22:56  [ТС]     0D 0A FF В конце файла после шифрования #21
alsav22, Извините
Yandex
Объявления
06.06.2013, 22:56     0D 0A FF В конце файла после шифрования
Ответ Создать тему
Опции темы

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