@MixA1995

Медленное шифрование AES256, как ускорить?

Добрый день. Суть вопроса такова: моя программа должна будет хранить часть пользовательских данных в зашифрованном виде. Я нашёл реализацию алгоритма AES256, написал функцию для шифрования файла. Всё бы хорошо, но вот шифрование происходит очень медленно.

void MyEncryptFile() {
    aes256_context ctx;
    uint8_t BUFFER[16];
    uint8_t PASSWORD[32] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
      0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f };
    FILE *ff1 = fopen("E:\\picture.jpg", "rb");
    FILE *ff2 = fopen("E:\\picture.jpg.encrypt", "wb");
    aes256_init(&ctx, PASSWORD);
      while (!feof(ff1))
      {
        fread(BUFFER, sizeof(uint8_t), 16, ff1);
        aes256_encrypt_ecb(&ctx, BUFFER);
        fwrite(BUFFER, sizeof(uint8_t), 16, ff2);
      }
    fclose(ff1);
    fclose(ff2);
    aes256_done(&ctx);
  }


Файл размером 1,23 МБ шифрует около минуты. Это я криво реализовал,или реализация самого AES такая? Или же это нормально и так и должно быть? Но как тогда например TrueCrypt шифрует "на лету"?

Реализация AES: https://github.com/asu2010/crypt_AES-256/blob/mast...
Помогите разобраться
  • Вопрос задан
  • 446 просмотров
Пригласить эксперта
Ответы на вопрос 2
@forspamonly2
используйте какой-нибудь openssl с аппаратно ускоренным aes.
Ответ написан
Комментировать
@Sumor
Ну если результат шифрования расшифровывается, и совпадает с зашифрованными другими программами данными, то всё правильно.
Проблема заключается в том, что часто реализованные в лоб алгоритмы выполняют много повторяющейся работы, которую можно оптимизировать. Как минимум, в процессорах 8-байтные регистры, а большинство операций в алгоритме - однобайтовые.
Для оптимизации можно и нужно использовать профайлер, который покажет узкие места, которые можно попробовать оптимизировать.
При компиляции нужно указать параметры для наибольшего ускорения.

Для реализации можно использовать специальные инструкции процессора AES-NI, которые и используются в truecrypt.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы