Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 1
Регистрация: 26.11.2016
Сообщений: 23
1

Ошибка в шифровании/расшифровании c RC4

28.11.2019, 07:49. Показов 558. Ответов 0

Author24 — интернет-сервис помощи студентам
Подскажите, где допустил ошибку?
Когда шифрую функцией code(1) - размер выходного шифротекста почему-то очень варьируется от ключа, то есть если в файле с открытым текстом было "123456789" в выходном шифротексте только "%%%%" т.е. только несколько зашифрованных символов.
А при расшифровании из этих же "%%%%" нескольких символов может расшифровать только часть или вообще больший бред выдать...
Не могу понять где допускаю ошибку
Если нужны будут какие-то подробности, я быстро отвечу)
Собственно при шифровании вызываю code и передаю "1", при расшифровании code и передаю "2".
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/* ключевое расписание */
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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2019, 07:49
Ответы с готовыми решениями:

RC4 увеличение файла при шифровании
реализую шифрование текстового файла шифром RC4 расшифровка - просто применение алгоритма же к...

ошибка в шифровании
Пытаюсь сделать шифрование через SLL, проблема в том, что если задавать строку для шифрования...

Ошибка при шифровании
Приветствую обитателей сего форума. Недавно сел решать задачку, и вроде бы все получилось, но -...

ошибка в шифровании
procedure TForm_2.Edit1Click(Sender: TObject); var st,st2,n,k,i:integer; j:string; begin ...

0
28.11.2019, 07:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.11.2019, 07:49
Помогаю со студенческими работами здесь

Ошибка при шифровании данных
procedure TForm2.btnEncryptClick(Sender: TObject); var SourceStream, DestStream: TFileStream;...

Ошибка: Operator not applicable to this operand type в шифровании RSA
Вот часть кода шифрования RSA, эта часть переводит текст из Memo1 в численный аналог и эти числа...

Ошибка "Method call expected" при шифровании RSA
private final static BigInteger one = new BigInteger(&quot;1&quot;); private final static...

RC4
Семь лет не программировал на Delphi, понадобилось программу для шифрования в RC4 сделать. Мне...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru