我想加密/解密大量的小数据(2-10 to )。现在性能还可以:在Core2Duo上,我得到了大约90 MBytes/s AES256 (当使用2个线程时)。但是我可能需要在将来改进这一点--或者至少减少对CPU的影响。
发布于 2010-06-15 20:01:01
JVM在执行代码(碰巧是AES加密)时不会利用特殊的CPU特性:将某些代码识别为AES的实现超出了JIT编译器的能力。要使用特殊的硬件(例如VIA处理器上的“挂锁”,或较新的Intel处理器上的AES-NI指令),您必须在某个时候通过“本机代码”。
可能,JCE提供者可以为您做到这一点。我不知道有任何现成的JCE提供程序,其中包括用于AES的优化的本机代码(有一个名为Apache JuiCE的项目,但它似乎被搁置了,我不知道它的状态)。不过,可以想象,SunJCE将在未来的版本中做到这一点(但由于Oracle购买了Sun和OpenJDK 7的过度特性,下一个版本何时发布尚不清楚)。或者,咬紧牙关自己使用本机代码。本机代码是通过JNI调用的,对于本机AES代码,流行的实现是来自布赖恩·格拉德曼的实现。当你用AES-NI指令得到一个更大更新的处理器时,用一些知道这些指令的代码(如英特尔 )替换本机代码。
通过使用AES-128而不是AES-256,您应该得到一个+40%的速度提升.打破AES-128目前已超出人类的技术能力范围,今后几十年仍应如此。你真的需要一个256位的AES密钥吗?
发布于 2014-12-03 14:45:20
以防有人碰到这个。JAVA 8现在使用AES-NI。参见:在默认情况下启用AES-NI本质?
发布于 2013-01-10 14:29:32
通过使用SunPKCS11安全提供程序和mozilla库,您可以从提高AES速度中获益。
安装程序描述在
https://stackoverflow.com/questions/3045520
复制相似问题