предварительно рассчитать размер зашифрованного буфера AES256 в c - PullRequest
1 голос
/ 01 декабря 2011

Как рассчитать размер зашифрованного файла / буфера AES256.

Я делаю malloc из (n + AES_BLOCK_SIZE -1) байтов (где n - размер незашифрованного буфера).

Но всегда ли размер зашифрованного буфера будет таким же?Может ли он быть «меньше»?

Есть идеи, как мне заранее рассчитать точный размер?

Спасибо

Ответы [ 2 ]

3 голосов
/ 01 декабря 2011

Зависит от того, какой отступ вы используете.Наиболее распространенной схемой заполнения (поскольку она обратима и содержит небольшую проверку целостности) является заполнение PKCS # 5: добавляется такое количество байтов, что конечный размер кратен размеру блока, и добавляется хотя бы один байт.,(Каждый добавленный байт имеет то же значение, что и количество добавленных байтов.)

Т.е. будет добавлен не более одного полного блока (16 байтов для AES).

n + AES_BLOCK_SIZE всегдадостаточно (а в некоторых случаях достаточно), но вы можете вычислить его более точно как n + AES_BLOCK_SIZE - (n % AES_BLOCK_SIZE).

Обратите внимание, что есть некоторые режимы работы, которые вообще не нуждаются в заполнении, такие как CTR, CFB иРежим OFB.Также обратите внимание, что вам часто требуется передавать вектор инициализации (еще один полный блок).

1 голос
/ 01 декабря 2011

AES - это «блочное» шифрование. Имеет 128-битный размер блока. Это означает, что он всегда принимает в качестве входных данных 128-битный блок (16 байт) и всегда выводит блок одинакового размера.

Если ваш ввод не кратен 16 байтам, вы должны добавить некоторые данные (возможно, байты, содержащие нулевое значение), чтобы округлить их.

Если ваши данные больше 16 байт, вы будете шифровать несколько блоков, и вам потребуется вызывать функцию шифрования AES столько раз, сколько у вас входных блоков.

Если вы только выделяете место для вывода, malloc(AES_BLOCK_SIZE); будет выделением, которое вы ищете. Не добавляйте входной размер и не вычитайте один байт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...