在Java AES加密中使用提供程序

时间:2018-06-20 18:33:12

标签: java encryption cryptography bouncycastle

这可能是一个棘手的问题,但是我对提供者的工作方式感到困惑。我已经尝试阅读此https://docs.oracle.com/javase/7/docs/technotes/guides/security/overview/jsoverview.html,但对我来说却没有任何意义。说我们有:

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC")

Cipher cipher= Cipher.getInstance("AES/CBC/PKCS5Padding")

根据链接,听起来好像提供程序指示正在使用的实现,但与提供程序无关,AES / CBC / PKCS5Padding是否基本相同?在该示例中,充气城堡(我猜“ BC”对应于哪个)碰巧具有比默认实现更有效的算法吗?谢谢您的宝贵时间。

1 个答案:

答案 0 :(得分:3)

  

独立于AES / CBC / PKCS5Padding基本上不是相同的   提供者?

是的。

  

在该示例中,充气城堡(我猜“ BC”对应   碰巧拥有比默认算法更有效的算法   实施?

可能不是。特别是在AES方面,由于使用了本机AES硬件,因此最近的Oracle提供者可能比Bouncycastle快得多。

  

那为什么要指定提供者?

好吧,我知道您没有要求,但这似乎就是您要去的地方。在大多数情况下,您应该指定提供程序。一般规则是避免指定提供程序,除非您有充分的理由这样做。保留提供者未指定的位置可提高可移植性。

不幸的是,在某些情况下,您可能需要指定提供程序。 JCE中提供的抽象并没有涵盖实践中出现的所有情况。如果您遇到其中之一,最好再问一个问题。