Что касается производительности, если вы можете передавать потоковое видео и музыку, то есть обрабатывать их по одному блоку за раз, тогда вам нужно только расшифровать один блок вперед, а не расшифровывать весь файл. Это, вероятно, будет достаточно для производительности независимо от алгоритма.
Безопасность
Для обеспечения максимальной безопасности попробуйте AES-256, предпочтительно в режиме CTR (см. статью Колина Персиваля для обоснования). Обратите внимание, что режим CTR преобразует блочный шифр AES в эквивалент потокового шифра без снижения его безопасности - у него есть некоторые полезные свойства, такие как расшифровка с произвольным доступом (по сравнению с CBC, которая заставляет вас расшифровывать все до нужных данных).
Если загрузка процессора слишком высока, RC4 слабее, но достаточно хорош для большинства применений. Обязательно используйте 256-битный ключ.
Наконец, способ генерации ключей шифрования очень важен :
Nonce / IV
Если вы используете один и тот же базовый ключ для шифрования всех файлов, всегда используйте одноразовый номер (a.k.a IV или «Вектор инициализации») при шифровании:
- nonce / IV - это группа случайных байтов, которые хранятся в незашифрованном виде рядом с вашим зашифрованным текстом (часто перед этим зашифрованным текстом)
- Создание и использование разных nonce / IV для каждого зашифрованного файла
- API режима CTR включают способ установки IV / nonce, используемая вами библиотека поддерживает его
- Если вы используете RC4:
- Спасите nonce / IV самостоятельно
- сгенерируйте окончательный ключ шифрования, используя HMAC-SHA256 с базовым ключом и одноразовым номером, как упомянуто здесь
Генерация ключа из пароля
Если пользователь вводит пароль, сгенерируйте базовый ключ шифрования, используя PBKDF2 (снова см. статью Колина Персиваля для обоснования).
Поскольку у вас есть реализация hmac-sha256 в библиотеке, вы легко можете внедрить PBKDF2-HMAC-SHA256 самостоятельно, найдите примеры реализации в сети или SO.