Задание № 1504

Студент

Калиниченко Михаил

Задача

Простой XOR-шифратор

Состояние

Завершено

Баллов

2

Дедлайн
18 марта 2019
Назначено

04.03.2019, 13:00

Завершено

19.05.2019, 17:01

Реализовать класс XorChipher простое шифрование с использованием оператора XOR. Простой класс, по сути FIFO'шка, принимающая байты данных, и выдающая по запросу "зашифрованные" байты потока и наоборот.

Постановка задачи

Реализовать класс XorChipher . public и protected методы классов фиксированы, кроме спецификаторов. Т.е. нельзя менять названия методов, а также типы и количество аргументов. НО в этих методах отсутствуют спецификаторы const и static, которые были удалены намеренно. Их необходимо вернуть на место.

private поля и private методы можно добавлять в класс XorChipher.

//XorChipher.hpp
class XorChipher {
public:
  XorChipher();
  XorChipher(const char* password);
  XorChipher(size_t size);
  XorChipher(size_t size, const char* password);
  ~XorChipher();
  XorChipher(const XorChipher&) = delete;
  XorChipher& operator=(const XorChipher&) = delete;

  void password(const char* passw);
  size_t push(const char* data, size_t size);
  size_t pop(const char* buff, size_t size);

protected:
  const size_t с_default_size = 1024;

};
  • XorChipher() -- Конструктор по умолчанию, задаёт длину буфера по умолчанию.
  • XorChipher(const char* password) -- Конструктор задающий длину буфера по умолчанию и пароль.
  • XorChipher(size_t size) -- Конструктор задающий длину буфера.
  • XorChipher(size_t size, const char* password) -- Конструктор задающий длину буфера и пароль.
  • XorChipher(const XorChipher& val) = delete -- запрет копирующего конструктора.
  • XorChipher& operator=(const XorChipher&) = delete -- запрет оператора присваивания
  • ~XorChipher() -- деструктор.
  • void password(const char* passw) -- задаёт новый пароль, вся история сбрасывается.
  • size_t push(const char* data, size_t size) -- передать (протолкнуть) на шифрование очередную порцию данных. Читает из входного буфера данные, шифрует их с помощью заданного пароля и функции XOR, записывает шифрованные данные в пустое место внутреннего буфера. Возвращает количество забранных из буфера байт. Если пароль не задан или задан размер внутреннего буфера равный нулю(0), то ничего не делает и возвращает ноль(0).
  • size_t pop(const char* buff, size_t size) -- забрать (вытолкнуть) зашифрованные данные из буфера. Копирует данные из внутреннего буфера. Возвращает количество записанных в буфер байт.
  • const size_t _default_size = 1024 -- Длина внутреннего буфера по умолчанию.

Требования

  1. public и protected методы классов фиксированы. Т.е. нельзя менять названия методов, а также типы и количество аргументов.
  2. Названия header и source файлов следующие: XorChipher.hpp, XorChipher.cpp.
  3. Написать unit test'ы для реализованных классов.

Действия