Существуют ли рекомендуемые сценарии валидации ключей (паролей) симметричных алгоритмов шифрования
Пишу утилиту с функциональностью шифрования файлов симметричными алгоритмами шифрования на выбор. Утилита может шифровать сразу несколько файлов, из зашифрованных байтов которых формируется один файл. Ключ шифрования, как и вектор инициализации, генерируются из введенного пользователя пароля классом Rfc2898DeriveBytes. Помимо алгоритма, в утилите можно выбрать длину ключей, если алгоритм допускает несколько, длину блоков (правда, все симметричные алгоритмы, реализованные в .Net допускают только одну их длину), ChipherMode, PaddingMode и FeedbackSize. Так же в настройках можно указать какие данные о пароле будут доступны в метаданных выходного файла. Утилита допускает включить в метаданные хеш пароля, а так же длину ключа, что позволяет при дешифрации файла валидировать введенный пароль точно, но так же она допускает и отсутствие такой информации в метаданных, а это значит, что в этом случае нет никакой возможности проверить пароль на валидность до попытки дешифровать данные.
Есть ли какие-нибудь практики или рекомендуемые сценарии как лучше действовать в таких случаях?
Мне кажется странным, пытаться дешифровать данные не будучи уверенным в правильности ключа, так как это, в случае неправильного пароля и сгенерированного из него ключа, ведет к исключениям и получению ошибок, что усугубляется еще и тем, что в некоторых случаях дешифрация не валидными ключами даже может пройти и вполне успешно.