С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
pimpka
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 6
#1

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

27.10.2012, 20:51. Просмотров 1259. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2012, 20:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Симметричное шифрование (C++):

Симметричное слово - C++
Найти во введённом тексте самое длинное симметричное слово, т.е. слово, которое слева направо и справа налево читается одинаково. Считать,...

симметричное число - C++
пытаюсь определить, является ли 4-х значное число палиндромом. что я здесь не так делаю? #include &lt;iostream&gt; using namespace std; ...

Симметричное число - C++
Помогите пожалуйста! 1. Проверить является ли данное число симметричным (Одинаково пишется слева направо и справа налево)

Симметричное число - C++
Помогите пожалуйста 1. Проверьте, является ли число симметричным (одинаково пишется слева направо и справа налево) 2.Задан массив из N...

Найти самое длинное симметричное слово в строке - C++
добрый день, необходимо найти самое длинное симметричное слово в строке. Помогите поправить ошибки, компилятор ругается на мой код. ...

В массиве найти самое большое симметричное число - C++
Здравствуйте! Помогите, пожалуйста, с задачей: в целочисленном массиве найти самое большое симметричное число.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2012, 20:51
Привет! Вот еще темы с ответами:

В строке найти самое длинное симметричное слово - C++
Здравствуйте, помогите пожалуйста написать программу. В строке найти самое длинное симметричное слово. Написал его в консоле win32...

В строке найти самое длинное симметричное слово - C++
Помогите пожалуйста написать программу. Задача:В строке найти самое длинное симметричное слово(кабак, казак,...). Надо что-бы было...

Написать функцию, находящую в строке символов симметричное слово. - C++
Возможно ли создание программы: Написать функцию, находящую в строке символов симметричное слово. Заранее спасибо.

Найти во введённом тексте самое длинное симметричное слово - C++
1. Дана строка. Удвоить каждую встречающуюся «о» и «а». 2. В заданном тексте удалить из текста пробелы и подсчитать длину...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.