У меня есть решение C#, которое шифрует кучу небольших фрагментов данных с помощью AES.
//Вот как я настраиваю объект Aes
var aes = Aes.Create();
aes.Mode = CipherMode.CBC;
aes.KeySize = 256;
aes.Padding = PaddingMode.PKCS7;
Затем я записываю необработанные байты зашифрованного текста в столбцы SQL Server VARBINARY.
Запрашивая длину этих столбцов зашифрованного текста VARBINARY, я ожидал, что они всегда будут кратны 16 байтам. Однако здесь, похоже, это не так.
Я попытался прочитать об этом в Интернете, и единственные вопросы, которые я нашел, - это вопрос, почему зашифрованный текст AES дополняется до 16-байтовых блоков, поэтому я подумал, что задам здесь обратный вопрос.
Примечания:
- Я протестировал расшифровку одного из этих зашифрованных текстов странного размера, и он работал нормально, поэтому зашифрованный текст не искажен.
- Я заметил, что это происходит не часто, за один прогон это произошло 19 раз из 5828.
- Когда это происходит, оно всегда отличается от единицы (31 вместо 32, 767 вместо 768 и т. д.).
У меня возникла мысль, что, возможно, стандарт AES может обрезать байты шифрования, которые равны нулю (или какому-то другому хорошо известному числу) с конца вывода, поскольку это может быть просто восстановлено дешифратором? Но хотелось бы разъяснений.