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

Симметричное шифрование - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программа, печатающая в консоли треугольники из звездочек http://www.cyberforum.ru/cpp-beginners/thread681988.html
Цель задания - чтобы программа вывела треугольники в консоль в таком виде, как показано на рисунке, т.е. рядом. Я справился с задачей, и у меня все работает, но хотелось бы знать, хорошо ли я...
C++ Проверить, является ли последовательность убывающей с клавиатуры вводится последовательность n чисел, является ли последовательность убывающей c++ Добавлено через 1 минуту Ребят, помогите пожалуйста. Просто я вообще не шарю(( http://www.cyberforum.ru/cpp-beginners/thread681987.html
Самый быстрый способ посчитать сумма элементов матрицы, находящихся в матрице C++
Здравствуйте форумчане! Подскажите мне самый быстрый способ нахождении суммы элементов матрицы, находящихся на главной диагонали матрицы. Мой вариант работает за O(n^2), что не есть хорошо. ...
C++ Работа с большими файлами
Как в linux и freebsd вписать блок в середину файла ? Какими библиотеками - фукнциями воспользоваться ? Файлы за гигабайт, перечитываение - перезапись хвоста исключены. Тоже самое с удалением блока в...
C++ char* http://www.cyberforum.ru/cpp-beginners/thread681941.html
char *text; text = "qwerty"; Насколько разумно писать так? Читал где-то, что это неправильно, но препод настаивает на том, что все ок.
C++ Вывести содержимое до первой точки Помогите решить задачу. Дан не пустой текстовый файл. Вывести его содержимое до первой точки. Посчитать количество символов(отличных от пробелов, табуляции и Enter). Вот мой набросок. ... подробнее

Показать сообщение отдельно
pimpka
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 6

Симметричное шифрование - C++

27.10.2012, 20:51. Просмотров 1155. Ответов 0
Метки (Все метки)

Необходимо написать на языке C++ программу симметричного шифрования бинарных файлов. Шифрование должно выполняться в режиме CBC (chain block cipher). Программа должна использовать 8-и битный ключ и выполнять операции зашифрования и расшифрования указанного файла.
Необходимо реализовать две функции с заданным интерфейсом: encryptCBC, decryptCBC. Список аргументов функций одинаковый:
- buffer - буфер, в котором располагаются входные и выходные данные;
- size - размер (длина) буфера;
- key - ключ шифрования;
- CBC - значение шифр-блока, полученное с предыдущей итерации.
Обе функции должны возвращать одно и то же значение - шифр-блок.
Помогите(подскажите),пожалуйста.

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
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
#define BUFFER_SIZE 100
 
unsigned char encryptCBC( unsigned char* buffer, int size, unsigned char key, unsigned char CBC ) {
// <ToDo> : implement encryption algorithm
}
 
unsigned char decryptCBC( unsigned char* buffer, int size, unsigned char key, unsigned char CBC ) {
// <ToDo> : implement decryption algorithm
}
 
int main( int argc, char *argv[] ) {
    enum CipherMode { ENCRYPT, DECRYPT };
    if( argc != 5 ) {
        cerr << "Bad input parameters" << endl;
        return -1;
    }
    unsigned char key = atoi( argv[ 1 ] );
    int mode = ENCRYPT;
    if( strcmpi( argv[ 2 ], "dec" ) ) {
        mode = DECRYPT;
    }
 
    char *inputFName = argv[ 3 ];
    char *outputFName = argv[ 4 ];
 
    FILE *input, *output;
    input = fopen( inputFName, "rb" );
    output = fopen( outputFName, "wb" );
    
    if( input && output ) {
        int totalCount = 0;
        unsigned char buffer[ BUFFER_SIZE ];
        unsigned char CBC = 0;
        while( !feof( input) ) {
            int actuallyRead = fread( ( void* )buffer, sizeof( buffer[ 0 ] ), BUFFER_SIZE, input );
            if( mode == ENCRYPT ) {
                CBC = encryptCBC( buffer, actuallyRead, key, CBC );
            } else {
                CBC = decryptCBC( buffer, actuallyRead, key, CBC );
            }
            fwrite( ( void* )buffer, sizeof( buffer[ 0 ] ), actuallyRead, output );
            totalCount += actuallyRead;
        }
        cout << totalCount << " bytes processed" << endl;
    } else {
        cerr << "Can't open input or output file" << endl;
    }
    fclose( input );
    fclose( output );
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru