繁体   English   中英

Bouncy Castle作为提供者v / s Bouncy Castle API

[英]Bouncy Castle as provider v/s Bouncy Castle API

我有一种情况,我需要使用OpenPGP加密某些文件。 我正在使用Bouncy Castle来这样做。

据我了解,Bouncy Castle加密可以在Java中以两种方式使用:

  1. 我将Bouncy Castle添加为提供程序,并继续使用标准Java库。

  2. 我直接使用Bouncy Castle库中指定的类。

我想知道两种方法的优缺点,以及推荐哪种方法。

另外,如果我使用的是第二种方法,那么为什么我仍然必须将Bouncy Castle添加为安全提供程序。 如果我不这样做,那么执行以下行时会出现“ No Such Provider”异常:

PGPEncryptedDataGenerator encGen =
            new PGPEncryptedDataGenerator(
            new JcePGPDataEncryptorBuilder(PGPEncryptedData.CAST5).setWithIntegrityPacket(withIntegrityCheck).setSecureRandom(
            new SecureRandom())
            .setProvider("BC"));

据我了解,Bouncy Castle加密可以在Java中以两种方式使用:

  1. 我将Bouncy Castle添加为提供程序,并继续使用标准Java库。

  2. 我直接使用Bouncy Castle库中指定的类。

我想知道两种方法的优缺点,以及推荐哪种方法。

Java JCA是设计更好的文档,当然也是文档更好的API。 它具有更好的定义的异常处理,以及更多的最新参数处理( ByteBuffer )。

此外,通过使用提供程序抽象,不仅可以使用基于软件的提供程序(例如Bouncy Castle)来增强它,还可以使用平台功能和硬件提供程序来增强它。 因此,如果您根据JCA进行编程,则会获得更加灵活的运行时奖励。

另一方面,轻量级加密API是一种相对较低级别的API,它以相对良好的结构化方式提供了更多功能。 如果使用它,则基本上是选择Bouncy Castle作为唯一的功能提供者。 Bouncy Castle仅包含Java代码中的特定实现,这意味着您将不会获得(很多)硬件支持。

Bouncy Castle的轻量级API没有管辖区限制(例如128位AES密钥)。 因此,如果您想解决这些限制,就可以将其用于自己的协议 (如果您可以下载一个等效的库而不会出现问题,那么请首先让我开始了解这些限制的原因)。

另外,如果我使用的是第二种方法,那么为什么我仍然必须将Bouncy Castle添加为安全提供程序。 如果我不这样做,那么我会收到“没有这样的提供者”异常(...)?

充气城堡PGP功能实际上是建立在JCA之上的; 就这么简单。 如果不是,则无法使用Java密钥或其他(平台或硬件)加密功能。

许多其他软件组件也假定要使用JCA。 您不能简单地将轻量级API插入现有协议实现中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM