Сжатие и шифрование данных в блоки - PullRequest
1 голос
/ 15 февраля 2012

Я работаю над системой сжатия и шифрования, и я столкнулся с небольшим препятствием, которое, я думаю, я могу преодолеть, обдумав это с некоторыми профессионалами.

Цель

Я хочусистема файловых контейнеров, которая сможет хранить много типов файлов.Я хочу иметь возможность сжимать (LZF) и шифровать (AES) , каждое из которых основано на определенных правилах, которые будут определены во время сжатия / шифрования, и той информации, которая хранится в заголовках файлов.,Я хочу иметь возможность извлекать файлы из этого контейнера в виде потоков.Это означает, что файлы должны быть сжаты / зашифрованы в блоках, чтобы иметь возможность читать их последовательно.В противном случае мне пришлось бы расшифровать, а затем сразу распаковать весь файл в память, и я хочу, чтобы этот процесс занимал как можно меньше памяти.

Текущее состояние

Я завершил заголовоксистема, которая содержит информацию о самом контейнере, таблице файлов и всей информации о файле.В настоящее время я работаю над потоком записи файлов для создания реальных контейнеров.

Issue

В процессе этого процесса я пытался выяснить, как можно сжать данные файла в байтмассив, а затем зашифровать его в блоках.Я думаю, что я остановился на 1024-байтовых блоках, что означает, что это будет 64 блока зашифрованных данных AES, которые будут храниться, поскольку AES шифрует в 128-битных блоках.Вся эта система будет настроена с использованием потоков.Это означает, что я не могу контролировать, сколько данных будет отправлено в мою систему.Моя проблема в том, что при сжатии данных я абсолютно не представляю, насколько большими будут данные, которые я сжимаю.Я мог бы быть меньше, того же размера или даже больше, чем оригинальный размер.Мне нужно знать, как успешно распаковывать данные в блоки.

Пример проблемы

Допустим, у меня есть 128-байтовый блок информации, который я хочу зашифровать, сжать и сохранить в этомСистема, которую я описал.Я написал бы это потоку, который в свою очередь сжал бы это.Также допустим, что 128-байтовый блок сжимается до 64-байтового блока.Затем я отправляю другой блок, длина которого равна 256, и он сжимается до 128 байтов.Оба эти блока копируются в буфер, а затем новый 384-байтовый буфер будет отправлен для шифрования, что приведет к (24) 16-байтовым блокам.Затем он будет записан в контейнерную систему в 1024-байтовом блоке.

В этом примере у меня нет проблем с расшифровкой информации, поскольку они находятся в блоках, но я не могу сказать то же самое для этапа декомпрессии.Из моего понимания сжатия, если я попытаюсь расшифровать сжатые блоки размером 64 и 128 байт, у меня будут недопустимые данные, потому что они изначально были сжаты отдельно.Если вам нужно больше разъяснений, пожалуйста, дайте мне знать.

1 Ответ

1 голос
/ 15 февраля 2012

Когда вы читаете данные из потока, вы получаете счетчик байтов. Только на последнем блоке он будет меньше размера блока. Это ваш сигнал для вызова WriteFinalBlock и позволить шифровщику выполнить заполнение.

...