При расшифровке в конце файла появляются лишние символы. С чем это связано?
Исходный текст:
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;
}
Вообщем то ответ дал @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;
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Как правильно удалять последний item из вот таких вот структур, и записывать следующий в самое начало, чтобы последующие iD повышались на 1
Как ввести данные во время выполнения программы в OpenGL?
Я новичок, изучаю С++ и для практики хочу написать (может списать) приложение похожее на ankiappAnkiapp - это карточки для запоминания, например, английских...
Здравствуйте, недавано познакомился с Qt, но визникли некоторые проблемы по поводу использования умных указателей вместес QTableView, вот пример...