Java的AES加速

Chr*_*her 17 java encryption aes

我想加密/解密许多小的(2-10kB)数据.现在性能还可以:在Core2Duo上,我得到大约90 MBytes/s的AES256(当使用2个线程时).但是我可能需要在将来改进它 - 或者至少减少对CPU的影响.

  • 是否可以使用Java专用AES加密硬件(使用JCE,或者可能是不同的API)?
  • 如果我有更好的CPU,Java会利用特殊的CPU功能(SSE5?!)吗?
  • 或者有更快的JCE提供商?(我试过SunJCE和BouncyCastle - 没什么大不同.)
  • 其他可能性?

Tho*_*nin 14

在执行恰好是AES加密的代码时,JVM本身不会利用特殊的CPU功能:将某些代码识别为AES的实现超出了JIT编译器的能力.要使用特殊硬件(例如VIA处理器上的"挂锁"或新英特尔处理器上的AES-NI指令),您必须在某个时候通过"本机代码".

可能,JCE提供商可以为您做到这一点.我不知道任何现成的JCE提供程序,其中包括针对AES的优化本机代码(有一个名为Apache JuiCE的项目,但它似乎停滞不前,我不知道它的状态).但是可以想象,SunJCE将在未来的版本中实现这一点(但是由于Oracle购买Sun和OpenJDK 7的过度使用,目前还不清楚下一个Java版本何时发布).或者,咬紧牙关并自己使用本机代码.本机代码通过JNI调用,对于本机AES代码,一种流行的实现是Brian Gladman的实现.当您使用AES-NI指令获得更大更新的处理器时,请使用一些知道这些指令的代码替换该本机代码,如英特尔所述.

通过使用AES-128而不是AES-256,您可以获得+ 40%的速度提升.打破AES-128目前超出了人类的技术范围,并且应该在未来几十年保持这种状态.您真的需要一个256位的AES密钥吗?

  • 自己实施任何密码都要非常谨慎.做错了或将关键材料泄露给坏人是极其困难的.(时间攻击,分支预测攻击,你的名字).通常,您应该*始终*将加密实现留给专家. (7认同)
  • 当然你的意思是"非常容易"? (4认同)

use*_*024 10

以防人们碰到这个.JAVA 8现在使用AES-NI.请参阅:默认启用AES-NI内在函数?


Pet*_*aný 7

通过将SunPKCS11安全提供程序与mozilla-nss库一起使用,您可以从提高的AES速度中受益.

安装程序描述于