当前位置: 首页 > 面试题库 >

Java的AES加速

石喜
2023-03-14
问题内容

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

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

问题答案:

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

JCE提供者可能会为您做到这一点。我不知道有任何现成的JCE提供程序,其中包括针对AES的优化本机代码(有一个名为Apache
JuiCE
的项目,但它似乎已经停滞了,我不知道它的状态)。但是可以想象,SunJCE会在将来的版本中做到这一点(但是,由于Oracle购买了Sun,并且OpenJDK
7的功能过于强大,因此尚不清楚何时发布下一个Java版本)。或者,硬着头皮自己使用本机代码。通过JNI调用本机代码,对于本机AES代码,一种流行的实现是Brian
Gladman的实现。。当您使用AES-
NI指令获得更大,更新的处理器时,请使用一些了解这些指令的代码来替换该本机代码,如Intel所述。

通过使用AES-128而不是AES-256,您应该获得+
40%的速度提升。目前,突破AES-128超出了人类的技术范围,并且在接下来的几十年中仍将如此。您是否真的需要256位AES密钥?



 类似资料:
  • 问题内容: 我有下面的Java代码来加密使用64个字符的密钥的字符串。我的问题是这将是AES-256加密吗? 以下是结合了divanov和laz建议的代码。 问题答案: 是的,它将是64个字符,即32个字节和256位,并且256位的任何序列都可以用作AES-256密钥。 我建议您使用DatatypeConverter.parseHexBinary(或您选择的库中的类似实用程序)将十六进制字符串转换

  • 我想加密和解密密码使用128位AES加密与16字节的密钥。在解密值时,我得到错误。我在解密的时候漏掉了什么吗? 错误信息 }

  • 我之所以问这个问题,是因为两天来我读了很多关于crypto AES加密的帖子,就在我以为我得到了它的时候,我意识到我根本没有得到它。 这个帖子是最接近我的问题,我有完全相同的问题,但它没有得到回答: CryptoJS AES加密与JAVA AES解密值不匹配 我得到的是已经加密的字符串(我得到的代码只是为了看看他们是怎么做的),所以修改加密方式不是一个选项。这就是为什么所有类似的问题对我来说都不是

  • 问题内容: 我有一个使用第三方付款门户的在线电子商务网站。在第三方支付门户要求所有人开始使用具有其他支付参数的哈希键之前,支付门户一直工作良好。 现在的问题是,第三方支付门户网站仅提供了一页文档来实现哈希密钥。 这是提供的文档: 加密演算法 为了减轻数据传输和发布过程中的参数调整/修改,商家可以使用Telenor POC提供的哈希密钥对请求进行加密。该加密请求与主请求一起发送,然后在OPS端进行协

  • 加密有三个阶段: 生成16字节随机数据作为CBC模式所需的初始向量(IV) 应用AES密码,使用PKCS5填充方案在CBC模式下加密文件内容。 应用MAC密码(例如“HMACSHA1”)来计算封装IV和密文的MAC 加密文件将是以下数据的级联:16字节IV密文20字节HMAC 我写的代码是这样的,它成功地加密了一个文本文件。这是我的应用程序的全部代码。

  • 问题内容: 我想使用128位AES加密和16字节密钥对密码进行加密和解密。解密值时出现错误。解密时我丢失任何内容吗? 错误信息 最后我基于@QuantumMechanic答案使用以下解决方案 } 问题答案: 如果对于块密码,您将不使用包含填充方案的转换,则需要使明文中的字节数为该密码的块大小的整数倍。 因此,要么将纯文本填充到16字节的倍数(即AES块大小),要么在创建对象时指定填充方案。例如,您