Последние несколько часов я пытался отлаживать свой код и не мог понять проблему.В конце концов я настроил свой файловый поток на выдачу исключений на failbit
, и я обнаружил, что мой файловый поток по какой-то причине устанавливает битовый бит.У меня нет абсолютно никакой причины, по которой устанавливается отказоустойчивый бит, потому что все, что я делаю, - это записываю 2048-байтовые куски данных в поток, пока внезапно не произойдет сбой (в одном и том же месте каждый раз).хотел бы показать вам мой код, чтобы увидеть, может ли кто-нибудь увидеть проблему и, возможно, увидеть, что может вызвать сбой std :: ios :::
bool abstractBlock::encryptBlockRC4(char* key)
{//Thic encryption method can be chunked :)
getStream().seekg(0,std::ios::end);
int sLen = int(getStream().tellg())-this->headerSize;
seekg(0);//Seek to beginning of Data
seekp(0);
char* encryptionChunkBuffer = new char[2048]; //2KB chunk buffer
for (int chunkIterator =0; chunkIterator<sLen; chunkIterator+=2048)
{
if (chunkIterator+2048<=sLen)
{
getStream().read(encryptionChunkBuffer,2048);
char* encryptedData = EnDeCrypt(encryptionChunkBuffer,2048,key);
getStream().write(encryptedData,2048);
free(encryptedData);
}else{
int restLen = sLen-chunkIterator;
getStream().read(encryptionChunkBuffer,restLen);
char* encryptedData = EnDeCrypt(encryptionChunkBuffer,restLen,key);
getStream().write(encryptedData,restLen);
delete encryptedData;
}
}
delete [] encryptionChunkBuffer;
dataFlags |= DATA_ENCRYPTED_RC4; // Set the "encryted (rc4)" bit
seekp(0); //Seek tp beginning of Data
seekg(0); //Seek tp beginning of Data
return true;
}
Приведенный выше код по существу шифрует файл, используя2048 кусков.Он в основном читает 2048 байт, шифрует его и затем записывает обратно в поток (перезаписывает «незашифрованные» данные, которые были там ранее).getStream()
просто возвращает дескриптор fstream в файл, с которым работает.
Ошибка всегда возникает, когда chunkIterator == 86116352 в строке getStream().write(encryptedData,2048);
Я знаю, что мой код может бытьтрудно декодировать, но, может быть, вы можете сказать мне некоторые возможные вещи, которые могут вызвать сбой бит?В настоящее время я думаю, что проблема заключается в том, что я читаю / записываю в поток, и это может вызывать проблемы, но, как я уже упоминал, любые идеи, которые могут вызвать сбой, могут помочь мне больше исследовать проблему.