Зашифровать файл и разшифровать

248
28 марта 2018, 05:58

При расшифровке в конце файла появляются лишние символы. С чем это связано?

Исходный текст:

fgdhgfshgfshsfbfsjrsgjnrjtyjarjtyhjatjrgjrthrtshsehgsrhtrsthsrh
dfgdgdgf
dsgfsdg
dsfgsdfg
dsfgsdfg
sdfgsd
gadsfg
dsfg
dsfg
sfdg
fdsgsfdgsfdgdsgdsfgsdgfdsg

Расшифрованный текст:

fgdhgfshgfshsfbfsjrsgjnrjtyjarjtyhjatjrgjrthrtshsehgsrhtrsthsrh
dfgdgdgf
dsgfsdg
dsfgsdfg
dsfgsdfg
sdfgsd
gadsfg
dsfg
dsfg
sfdg
fdsgsfdgsfdgdsgdsfgsdgfdsg
dg
d

Код

#include <iostream>
#include <fstream>
using namespace std;
int LFSR()
{
    static unsigned long S = 1;
    S = ((((S>>6)^(S>>5)^(S>>4)^(S>>0))&1)<<7)|(S>>1);
    return S;
}

int main()
{
    int key[255];
    for(int i = 0;i < 255;++i)
        key[i] = LFSR();
    for(int i = 0;i < 255;++i)
        cout<<key[i]<<endl;
    int s;
    //Открыаем файл в двоичном режиме
    fstream text("text.txt", ios_base::binary|ios_base::in);
    fstream chiper("chiper.txt", ios_base::binary|ios_base::out);
    //Проверили файл на открытие
    if(!text.is_open() && !chiper.is_open())
    {
        cout << "Файл не может быть открыт!\n";
        return 0;
    }
    //Зашифровка
    int i = 0;
    while(!text.eof())
    {
        text.read((char*)&s,sizeof(s));
        s = s^key[i];
        chiper.write((char*)&s,sizeof(s));
        ++i;
        if(i==255)
            i=0;
    }
    text.close();
    chiper.close();
/*-----------------------------------------------------------*/
    chiper.open("chiper.txt",ios_base::binary|ios_base::in);
    fstream dechiper("dechiper.txt", ios_base::binary|ios_base::out);
    if(!dechiper.is_open() && !chiper.is_open())
    {
        cout << "Файл не может быть открыт!\n";
        return 0;
    }
    //Расшифровка
    i = 0;
    while(!chiper.eof())
    {
        chiper.read((char*)&s,sizeof(s));
        s = s^key[i];
        dechiper.write((char*)&s,sizeof(s));
        ++i;
        if(i==255)
            i=0;
    }
    chiper.close();
    dechiper.close();
    return 0;
}
Answer 1

Вообщем то ответ дал @avp за что ему огромное спасибо.

добавил проверку на конец файла после read Кусок подправленного кода:

while(!text.eof())
    {
        text.read((char*)&s,sizeof(char));
        if(text.eof())
            break;
        cout << s;
        s = s^key[i];
        chiper.write((char*)&s,sizeof(char));
        ++i;
        if(i==255)
            i=0;
    }
READ ALSO
Запись и удаления из vector

Запись и удаления из vector

Как правильно удалять последний item из вот таких вот структур, и записывать следующий в самое начало, чтобы последующие iD повышались на 1

234
Ввод данных с клавиатуры в OpenGL (C++)

Ввод данных с клавиатуры в OpenGL (C++)

Как ввести данные во время выполнения программы в OpenGL?

201
Хочу написать приложение

Хочу написать приложение

Я новичок, изучаю С++ и для практики хочу написать (может списать) приложение похожее на ankiappAnkiapp - это карточки для запоминания, например, английских...

208
Умные указатели в С++(Qt)

Умные указатели в С++(Qt)

Здравствуйте, недавано познакомился с Qt, но визникли некоторые проблемы по поводу использования умных указателей вместес QTableView, вот пример...

266