Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
pimpka
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 6
#1

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

27.10.2012, 20:51. Просмотров 1519. Ответов 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
Ответы с готовыми решениями:

симметричное число
пытаюсь определить, является ли 4-х значное число палиндромом. что я здесь не...

Симметричное число
Помогите пожалуйста! 1. Проверить является ли данное число симметричным...

Симметричное слово
Найти во введённом тексте самое длинное симметричное слово, т.е. слово, которое...

Симметричное число
Помогите пожалуйста 1. Проверьте, является ли число симметричным (одинаково...

Определить симметричное слово максимальной длины
Дан символьный массив, образованный из слов, разделенных пробелами С...

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

Определить симметричное слово максимальной длины
Дан символьный массив, образованный из слов, разделенных пробелами. С...

В строке найти самое длинное симметричное слово
Помогите пожалуйста написать программу. Задача:В строке найти самое длинное...

Найти самое длинное симметричное слово в строке
добрый день, необходимо найти самое длинное симметричное слово в строке....


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

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

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