Я очень рекомендую не использовать при "комбинациях" какой-то конкретный файл или словарь. Точнее не так. Словарь или файл годен для "того что надо скомбинировать", но никак не для "всех возможных комбинаций"
Выше написали принцип составления, но по хорошему это не должно быть "хранилище", это должен быть "незавершенный процесс".
Учитывая, что вы фотограф, мне будет тяжело объяснить, что такое "генератор", но общий смысл такой. Если вы создадите все возможные комбинации и перестановки даже десяти букв - там файл будет наверное в гигабайтах измеряться, поэтому смысл в том, чтобы в конкретный момент программа перебора выдавала лишь одно значение, а остальные были "еще не сгенерированы" - то есть "остановленный до лучших времен" цикл.
Для простых сочетаний букв без определенного порядка берёте python (даже есть сайт с онлайн-редактором, чтобы попробовать) и импортируете itertools, там есть функции permutations/combinations. Для "форматов" или "вариантов" уже придется поиграть в программиста. Эти функции всегда возвращают "незавершенный цикл" и по мере обхода генерируют ОДНО значение, а старое забывают.
Если вы загрузите в скрипт файл в несколько гигов - ляжет по памяти. Если уже очень хочется прям файл, то его читать надо по одной строке, получим как бы сказать генератор с указателем "где закончили". Но еще лучше это как написали выше, вам надо вспомнить если не сам пароль, то хотя бы вашу методику "как вы обычно придумываете пароли" и составить кусок кода, который пройдет все ваши варианты - скомбинирует исходные буквы с шаблонами их написания и в моменте будет выдавать вам одну, а когда выдаст - создаст новую, первую забудет.