AES256 Скорость шифрования / дешифрования - PullRequest
1 голос
/ 26 марта 2012

Я пишу приложение, которое шифрует и дешифрует файлы.Я использую CipherInputStream и CipherOutputStream для процесса шифрования / дешифрования с использованием битового шифра AES256.

Моя проблема в том, что если я беру массив байтов и записываю в файл для шифрования на лету, это занимает примерно в 2 раза меньше времени, чем если бы я расшифровалфайл, создающий байтовый массив.Это странно, потому что, как я знаю, шифрование и дешифрование AES являются симметричными процессами, и для их завершения требуется одинаковое количество времени.

Есть идеи?

Ответы [ 2 ]

5 голосов
/ 26 марта 2012

В Stackoverflow много публикаций с жалобами на медленные операции ввода-вывода на Android.Очень часто проблема заключается в неправильном размере блока для выполнения операций записи.

Флэш-память, используемая в смартфонах, организована в больших блоках по несколько килобайт - поэтому для оптимальной скорости записи вы должны записывать только блоки по 4 КБ или несколько.

Шифры, такие как рабочий блок AES-в случае блоков по 8 байт - это может привести к значительному снижению производительности.

Я бы рекомендовал отправлять выходные данные CipherOutputStream через BufferedOutputStream с размером буфера 4 или 16 КБ.Это должно значительно ускорить процесс.

Кроме того, вы должны учитывать, что запись во флэш-память всегда медленнее, чем чтение.

2 голосов
/ 29 апреля 2013

Не уверен, как выглядит ваш код.

Я исправил похожую проблему медленного дешифрования. Мой оригинальный код ссылался на самые популярные примеры шифрования / дешифрования Android. Он использует CipherOutputStream для шифрования и CipherInputStream для расшифровки. Я обнаружил, что расшифровка примерно в 4 раза медленнее, чем шифрование. В конце концов я обнаружил, что проблема в CipherInputStream. Это намного медленнее, чем CipherOutputStream. Исправление заключается в использовании CipherOutputStream как для шифрования, так и для дешифрования, а также для переключения шифра с шифрования на дешифрование. После этого расшифровка выполняется так же быстро, как и шифрование.

Это могут быть другие способы добиться этого, если вы не хотите выводить расшифрованный файл в файл. Может быть, не использовать поток шифров вообще. Просто расшифруйте буферы. Я еще не пробовал.

...