针对AES-NI,Oracle关于Java 8的说法是:
加入了硬件内部函数来使用高级加密标准(AES)。可以使用UseAES和UseAESIntrinsics旗标启用基于Intel硬件的硬件AES内部函数。硬件必须是2010年或更新的Westmere硬件。例如,要启用硬件AES,请使用以下旗标:
-XX:+UseAES -XX:+UseAESIntrinsics
要禁用硬件AES,请使用以下标志:
-XX:-UseAES -XX:-UseAESIntrinsics
但是它没有说明是否默认启用了AES指令集(对于支持它的处理器)。所以问题很简单:如果处理器支持AES-NI,那么是否使用AES内部方法?奖励问题:是否有任何方法可以测试是否正在使用AES-NI?我猜你可以根据性能来猜测,但这不是一种最优或确切的测试方法。
对于不熟悉AES-NI内部方法的读者:它是使用AES-NI指令集将字节码替换为预编译的机器代码。这是由JVM完成的,因此不会显示在Java运行时或字节码的API中。
Cipher.getInstance()
,看看是否使用同一个实例会有所不同。 - Maarten Bodewes