Как сказал Питер, вектор инициализации и соль для получения ключа должны храниться вместе с зашифрованным файлом, в заголовке или тому подобном.
Вместо создания собственного специального формата файла для зашифрованного хранилища, посмотрите на формат сообщений OpenPGP (используемый как PGP, так и GnuPG и, возможно, другими программами).Это указано в RFC 4880 .Скорее всего, вам не придется реализовывать все это, но возьмите те части, которые вам нужны для вашего приложения.
В качестве дополнительного бонуса пользователь может затем использовать PGP / GPG (с правильными параметрами и паролем /ключ) расшифровать данные, если ваша программа должна как-то перестать работать.