Форум программистов, компьютерный форум CyberForum.ru

шифрование RC4 - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ алгоритм Флойда http://www.cyberforum.ru/cpp-beginners/thread575500.html
Найти минимальные пути между всеми парами вершин, используя алгоритм Флойда. А л г о р и т м Ф л о й д а Данные: матрица весов С(D) орграфа D. Результат: расстояния между всеми парами вершин D = d(vi,vj). 1. Для всех i = 1,…,n , j = 1,…,n положим D = cij . 2. Для всех i = 1,…,n положим D = 0. 3. Положим m = 1. 4. Положим i = 1.
C++ Классы и методы, перегрузка операторов == и != не могу разобраться с перегрузкой операторов == или != для 2 массивов типа char и int состоящих из 5 элементов. при составлении кода пишет что невозможно преобразовать из int to stip/char to stip. stip - имя класса. class stip { char reszac; int resex; stip operator!=(stip obj); stip operator==(stip obj); http://www.cyberforum.ru/cpp-beginners/thread575499.html
C++ Хранение в векторе объектов своего класса
В общем-то проблема. Задачей является хранение пар ключ-значение в векторе. Значение в данном случае строка char*. Если ключ повторяется то хранятся оба значения с разными версиями. Проблемы: 1)minigw валится с этим проектом с самого начала. Где валится - фиг поймёшь, пошагово дебагером доходишь до конца - оно работает хорошо и корректно. Тот же профиль для дебага запускаешь на выполнение до...
C++ Помогите решить задачу
Здравствуйте ! Очень прошу помочь. Дело вот в чем, нужно написать курсовую работу: На плоскости заданы координаты двух противоположных вершин квадрата. Необходимо найти координаты двух остальных его вершин. Требуется написать программу, которая определяет координаты двух недостающих вершин квадрата. Входной файл состоит из двух строк. В первой строке аналогичным образом содержатся записанные...
C++ Динамическое выделение памяти для глобальных переменных http://www.cyberforum.ru/cpp-beginners/thread575427.html
задача стоит такая: с датчика потоком идет информация, её необходимо сохранять в ОЗУ (в глобальную переменную) хотел было объявить глобальный указатель и динамически выделять место, но оказалось, что так нельзя... как посоветуете решить задачу?
C++ Не получается работать с регулярными выражениями Добрый день, коллеги! Обращаюсь с вопросом, потому что новичок. Мне необходимо, используя регулярные выражения, скопировать определенные строки со страницы в Интернете. Теперь подробнее и по порядку. Исходный код страницы я получаю с помощью CURL. Это у меня получается и работает. С регулярными выражениями немного разобрался. Гуглил, читал всякую информацию, понимать их начал. "Игрался" с... подробнее

Показать сообщение отдельно
blackbanny
128 / 115 / 2
Регистрация: 14.11.2010
Сообщений: 707
15.05.2012, 20:51     шифрование RC4
Делаю шифрование RC4, но почему то дешифрует неправильно, не могли бы подсказать почему?

.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
#pragma once;
class RC4 {
 
public:
    RC4();
    void prepare_key(char *key_data_ptr, int key_data_len);
    char* rc41(char *buffer_ptr, int buffer_len);
    char* readFile();
    int length;
private:    
        char mState[256];       
        int mX;        
        int mY;
        string message;
        char* mes;
    void swap_byte(char *a, char *b);
};
.cpp:
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
#include "rc4.h"
 
RC4::RC4() {
    mX = 0;
    mY = 0;
    mes = "";
}
 
char* RC4::readFile() {
    char line[1024];
    ifstream F("message.txt");
    if (!F) {
        return new char;
    } else {
        int i = 0;
        while (F.getline(line, sizeof(line))) {
            message = message + line + "\n"; 
        }
    }
}
 
void RC4::prepare_key(char *key_data_ptr, int key_data_len)
{         
     for(int counter = 0; counter < 256; counter++) {
        mState[counter] = (char)counter;
     }
     
     
     int j = 0;
     for(int i = 0; i < 256; i++) {         
        j = (j + (int)mState[i] + key_data_ptr[i % key_data_len]) %256;
        swap_byte(&mState[i], &mState[j]);
     }       
 }
 
char* RC4::rc41(char *buffer_ptr, int buffer_len)
 {      
     char xorIndex;
     char* cipher = new char[buffer_len];
     for (int m = 0; m < buffer_len; m++) {
         mX = (mX + 1) % 256;
         mY = (mY + mState[mX]) % 256;
         swap_byte(&mState[mX], &mState[mY]); 
         xorIndex = mState[(mState[mX] + mState[mY]) % 256];
         cipher[m] = buffer_ptr[m] ^ xorIndex;
     }
     return cipher;
 }
 
void RC4::swap_byte(char *a, char *b)
 {
     unsigned char swapByte; 
     
     swapByte = *a; 
     *a = *b;      
     *b = swapByte;
 }
создаю так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
key = new char[3];
                key[0] = 'k';
                key[1] = 'e';
                key[2] = 'y';
                char* qwe = "AA";
                rc4 = new RC4();
                rc42 = new RC4();
                
                rc4->prepare_key(key, 3);
                encryptedMessage = rc4->rc41(qwe, 2);
                cout << encryptedMessage << "\n";
 
                rc42->prepare_key(key, 3);
                decryptedMessage = rc42->rc41(encryptedMessage, 2);
                cout << decryptedMessage;
Добавлено через 2 часа 18 минут
подскажите что не так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 06:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru