Подскажите, где допустил ошибку?
Когда шифрую функцией code(1) - размер выходного шифротекста почему-то очень варьируется от ключа, то есть если в файле с открытым текстом было "123456789" в выходном шифротексте только "%%%%" т.е. только несколько зашифрованных символов.
А при расшифровании из этих же "%%%%" нескольких символов может расшифровать только часть или вообще больший бред выдать...
Не могу понять где допускаю ошибку
Если нужны будут какие-то подробности, я быстро отвечу)
Собственно при шифровании вызываю code и передаю "1", при расшифровании code и передаю "2".
/* ключевое расписание */
void __fastcall TForm2::rc4_init(char *key, int key_length)
{
for (i = 0; i < 256; i++)
S[i] = i;
for (i = j = 0; i < 256; i++)
{
unsigned char temp;
j = (j + (int)key[i % key_length] + S[i]) & 255;
temp = S[i];
S[i] = S[j];
S[j] = temp;
}
i = j = 0;
}
/* Вывод одного псевдослучайного байта */
unsigned char __fastcall TForm2::rc4_output()
{
unsigned char temp;
i = (i + 1) & 255;
j = (j + S[i]) & 255;
temp = S[j];
S[j] = S[i];
S[i] = temp;
return S[(temp + S[j]) & 255];
}
//зашифрование/расшифрование
void __fastcall TForm2::code(int i) {
if(i==1) {
rc4_init((char *)password.c_str(), password.Length());
}
else if(i==2) {
rc4_init((char *)password2.c_str(),password2.Length());
}
//чтение файла
char pathToFile[50];
if(i==1) strcpy(pathToFile,path_ish);
else strcpy(pathToFile,path_coded);
ifstream original(pathToFile,ios::in | ios::ate);
size=(int) original.tellg();
memblock=new char[size];
enblock=new char[size];
original.seekg(0,ios::beg);
original.read(memblock,size);
original.close();
for (int x = 0; x < size; x++)
{
enblock[x] = (memblock[x] ^ rc4_output());
}
ofstream file;
if(i==1)
file.open(path_coded);
else file.open(path_decoded);
file << enblock;
file.close();
delete[] memblock;
delete[] enblock;
}