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

时间:2016-05-16 12:49:58

标签: java cryptography bouncycastle openpgp

我有一个案例需要使用OpenPGP加密某些文件。我正在使用Bouncy Castle这样做。

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

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

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

  3. 我想知道这些方法的优缺点,推荐使用哪种方法。

    此外,如果我使用第二种方法,那么为什么我仍然需要添加Bouncy Castle作为安全提供者。如果我不这样做,那么我会得到一个"没有这样的提供商"执行以下行时出现异常:

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

1 个答案:

答案 0 :(得分:3)

  

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

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

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

  4.         

    我想知道这些方法的优缺点,推荐使用哪种方法。

Java JCA是一个设计得更好,当然更好的文档API。它有更好的定义异常处理,更新的参数处理(ByteBuffer)。

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

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

Bouncy Castle的轻量级API没有管辖权限制(例如128位AES密钥)。如果你想解决这些限制,你可以使用它作为你自己的协议(如果你可以下载一个等价的库,那么首先不要让我开始说明为什么会出现这些限制的原因没问题)。

  

此外,如果我使用第二种方法,那么为什么我仍然需要添加Bouncy Castle作为安全提供者。如果我不这样做,那么我得到一个“没有这样的提供者”例外(...)?

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

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