Прежде всего, вы должны установить, что шифрование AES действительно является фактором, который делает это медленным.Весьма вероятно, что ввод / вывод гораздо важнее.Вы можете проверить это, удалив шифрование из уравнения и просто скопировав файлы.
Обычно диски (и даже твердотельные накопители) быстрые для последовательного чтения / записи.Поэтому было бы плохой идеей считывать файлы многопоточным способом из одной папки.Если вы должны использовать многопоточность, то создайте один поток для чтения / записи файлов, а затем распределите фрагменты по нескольким потокам для шифрования.
Однако шифрование CBC неочень полезно для этого, поскольку каждый блок зависит от выходных данных предыдущего блока (т. е. он является последовательным), например, использование режима CTR позволяет одновременно шифровать отдельные фрагменты.Кроме того, в режиме CTR вы можете кэшировать поток ключей , что также может значительно ускорить работу.Вы можете кэшировать поток ключей, зашифровав порции, состоящие из нулевых байтов.
Для действительно быстрого шифрования вы также можете посмотреть на произвольный доступ с использованием файлов отображения памяти.Это может быть быстрее, чем потоковые файлы, хотя обычно O / S уже кэширует файл в памяти в любом случае.
Если виновником является AES, вам следует посмотреть, включен ли AES-NI.PyCryptodome, похоже, поддерживает AES-NI, поэтому следует использовать для ускорения шифрования / дешифрования AES.
Наконец, если вы недостаточно умны, чтобы удалить getKey(password)
из циклатогда никто не сможет тебе помочь.Пожалуйста, профилируйте вашу заявку.Вы должны заменить getKey(password)
на функцию получения ключа на основе пароля, такую как PBKDF2, чтобы обеспечить безопасность для «обычных» пользовательских паролей.