По договоренности
Здравствуйте. Программа должна быть по предмету ООП, то есть с классами и написана на языке С++.
И так, само задание:
Шифрование, которое мне нужно: AES-256.
Написать программу консольного приложения, которое выполняет шифрование и расшифровку произвольных файлов с помощью заданного в соответствии с вариантом симметричного шифра. параметры шифрования программа должна принимать из командной строки следующего вида:
crypt -mode key scrname dstname
• mode: {enc, dec } шифрование и расшифровка;
• key: ключ, длина зависит от шифра;
• scrname: имя исходного файла;
• dstname: имя файла результата;
Если командная строка не соответствует необходимым условиям, программа должна отказаться от операции шифрования или расшифровки.
В начале файла криптограммы должна быть записана структура, указывающая тип, режим и длину шифра:
enum eChiperMode
{
ecb, //electronic code book простая замена // основное для выполнения
gamma, //gamming гаммирование // по желанию (не обязательно)
efb, //encryption with feedback шифрование с обратной связью // по желанию (не обязательно)
check //выработка имитоприставки // по желанию (не обязательно)
};
struct sCryptoHeader
{
char chiper_name[16]; //название шифра лишние байты обнулятся
eChiperMode mode; //режим шифрования
long long file_len; //длина файла открытых данных
};
Расшифровка должна выполняться только если шифр криптограммы совпадает с шифром, реализованным в программе.
Обязательным для реализации является режим простой замены. Остальные режимы использования реализуются по желанию.
Шифрующий класс cEncryptor должен содержать открытые методы:
void setKeys(char masterKey[KEY_SIZE]);
void encryptBlock(char block[BLOCK_SIZE]);
void decryptBlock(char block[BLOCK_SIZE]);
где KEY_SIZE и BLOCK_SIZE константы, зависящие от выбранного шрифта.
Управляющий класс cController должен содержать следующие открытые методы:
long long encrypt(string key, string src_file_name, string dst_file_name);
long long decrypt(string key, string src_file_name, string dst_file_name);
эти методы в случае успеха возвращают количество зашифрованных байтов, а в случае неудачи возвращают 0.
Если можно использовать наиболее простые для понимания действия.
Можете сказать примерные сроки работы ?