Обрабатывать любой файл как поток битов для шифрования / дешифрования

0

Это должна быть достаточно простая задача, но я не смог ее понять, поскольку я некоторое время находился вне C++.

У меня есть алгоритм шифрования, который я хочу протестировать в звуковом файле. Я хочу разделить этот файл на куски, каждый из которых имеет размер C++ int. Затем я хочу передать эти значения через алгоритм и вставить их в новый зашифрованный файл. Затем мне нужно обратить вспять процесс, чтобы продемонстрировать, что его можно дешифровать, предпочтительно в воспроизводимый аудиофайл.

Я знаю, как обрабатывать сам алгоритм; это приводит к тому, что данные попадают в объемные куски, что проблема. Как мне это сделать, независимо от типа файла или формата, и только читать до конца файла? Крайне важно, чтобы я также мог видеть, сколько еще данных необходимо для заполнения последнего int, чтобы я мог сохранить это с помощью схемы шифрования для последующего изменения процесса.

Это так же просто, как открытие двоичного ввода и чтение ints до конца файла, даже если данные в файле не являются числовыми?

Чтобы уточнить, я хочу обрабатывать данные так, как если бы они были числовыми, независимо от того, какой файл я просматриваю. В принципе, я хочу иметь возможность вводить имя файла любого формата и получать входной поток, который позволяет мне читать в ints, игнорируя, если данные должны быть числовыми, буквенно-цифровыми или любыми другими видами компьютерных данных.

  • 0
    Возможно, вы захотите прочитать о std::istream::read и std::ostream::write .
  • 1
    Что будет делать ваша программа, если длина файла не будет кратна размеру (int)?
Показать ещё 2 комментария
Теги:
encryption
file-io

1 ответ

1
Лучший ответ

Вот два способа решения этой проблемы:

  • Один из способов - получить весь файл в памяти, в векторе int. Размер вектора можно получить, получив размер файла, добавьте sizeof(int) а затем разделите sizeof(int). Это сделает размер вектора подходящим для всех данных в файле как int если последние несколько байтов меньше, чем размер int.

  • Другой способ - прочитать один int за раз, пока файл в порядке. Когда последнее чтение не выполняется, вы проверяете std::istream::gcount если последнему (неудачному) чтению удалось прочитать что-либо.

  • 0
    Мне это нравится; Мне придется попробовать свои силы, прежде чем я смогу пометить его как ответ (может занять некоторое время). Будьте уверены, что если это работает, и если это самый эффективный метод (возможно, я запускаю этот код на смартфонах), я отмечу это как ответ.
  • 1
    На самом деле, первый метод будет переоценивать размер на единицу, если размер кратен sizeof(int) . Например (12 + 4) / 4 = 4, а не 3. Вы должны добавить sizeof(int)-1 .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню