代码之家  ›  专栏  ›  技术社区  ›  neubert

为什么JcaPEMKeyConverter有一个setProvider方法?

  •  0
  • neubert  · 技术社区  · 4 年前

    java.security.Security 有一个 addProvider javax.crypto.Cipher.getInstance() 可以使用( sun.security.provider.Sun , org.bouncycastle.jce.provider.BouncyCastleProvider

    但为什么呢 org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter 有一个 添加提供程序

    0 回复  |  直到 4 年前
        1
  •  1
  •   user13484    4 年前

    API的设计并不是基于用户必须使用BouncyCastle来提供加密服务的假设,这是正确的——这方面的一个现成的例子是人们使用FIPS提供者,例如BCFIPS。

    我们确实有一个针对FIPS和非FIPS用户的支持计划,它确实提供了对正在进行中的FIPS版本的早期访问,作为其中的一部分,这确实需要成本(这就是我们为所有事情提供资金的方式)。但是,实际发布的FIPS jarbouncycastle.org都是根据BC许可证授权的,基本上是MIT X11许可证,就像我们所有其他出版的作品一样。我希望这能消除混乱。

        2
  •  1
  •   dave_thompson_085    4 年前

    我不知道你认为使用的是什么“名称空间”。 JcaPEMKeyConverter 使用JCA实现它需要的加密操作,它可以使用 提供所需操作的JCA提供程序;几乎全部 指向 JCA的一个特点是供应商使用相同的API(或技术上的SPI, 服务提供商 接口),以便您可以有选择地为同一操作使用不同的提供程序。

    任何一个 jcaapi(使用任何合适的JCA提供者)或Bouncycastle自己的私有API(只使用Bouncy代码),例如。 org.bouncycastle.pkcs.PKCS12MacCalculator[Builder] 是具有可互换实现的接口 org.bouncycastle.pkcs.bc.BcPKCS12MacCalculator[Builder] org.bouncycastle.pkcs.jcajace.JcePKCS12MacCalcuator[Builder] . (Bouncy在区分JCA和JCE的名称时并不像人们希望的那样谨慎。)然而, 只有JCA形式。

    确实,拥有Bouncy附加库的人通常也会拥有并能够使用Bouncy提供者,但并不总是这样。例如,美国联邦政府系统被要求使用某些加密功能(主要是原语),这些功能在FIPS140(目前为修订版-2,很快-3)下得到验证,虽然Bouncy确实有一个FIPS140实现,但在商业上使用它需要付费,而如果您在某些IBM系统上使用IBM Java,则它有提供程序(不同于常见的Sun/Oracle/OpenJDK提供程序),这些提供程序是经过FIPS140验证的,不需要额外收费。