Да, это так. И нет, это не так.
AES-NI используется через встроенные функции Java , которые заменяют байт-код собственной реализацией AES. Поэтому, хотя вы не найдете прямого вызова инструкций AES-NI, вызов doFinal
в вашем коде Java в какой-то момент будет использовать аппаратное ускорение. Таким образом, код JCE - это просто Java, но JIT все еще может ускорить его. Отличная, да?
Чтобы действительно протестировать ваш код, вы можете использовать время разогрева для JIT (также для включения AES-NI). Вы должны иметь возможность использовать буфер вместо создания нового объекта массива каждый раз для зашифрованного текста.
Что еще более важно, может потребоваться перехватить вывод этого буфера и, например, XOR в окончательный буфер и распечатать. Это сделает практически невозможным для компилятора вообще пропустить код. С оптимизацией компилятора сложно справиться, если вас не интересуют сами результаты; в конце концов, компилятор или JIT могут просто пропустить шифрование, чтобы получить тот же результат.
Возможно, вам потребуется больше операций AES в одном цикле. Вы можете внедрить тестирование Монте-Карло, необходимое для соревнований AES, в качестве базы.