为什么jcapemkeyconverter有setprovider方法?

xoefb8l8  于 2021-07-05  发布在  Java
关注(0)|答案(2)|浏览(417)

我明白为什么了 java.security.Security 有一个 addProvider 方法-因为java有多个提供者可以提供 javax.crypto.Cipher.getInstance() 可以使用( sun.security.provider.Sun , org.bouncycastle.jce.provider.BouncyCastleProvider 等)。
但为什么呢 org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter 有一个 addProvider 方法?考虑到所使用的名称空间,我发现很难想象除了bouncycastle之外的任何“提供者”都会提供一个替代品。。。

1tu0hz3e

1tu0hz3e1#

我不知道你在用什么“名称空间”。 JcaPEMKeyConverter 使用jca实现所需的加密操作,并且可以使用任何提供所需操作的jca提供者;jca的几乎全部要点是提供者使用相同的api(或者技术上是spi,即服务提供者接口),这样您就可以有选择地为相同的操作使用不同的提供者。
bcpkix bcpg和bcmail库中的一些操作(也许是大多数操作)可以使用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, JcaPEMKeyConverter 仅以jca形式提供。
确实,拥有bouncy插件库的人通常也会拥有并能够使用bouncy提供程序,但并不总是这样。例如,美国联邦政府系统需要使用fips140下验证的某些加密函数(主要是原语)(目前正在修订-2,即将修订-3),虽然bouncy确实有一个fips140实现,但在商业上使用它需要付费,如果您在某些ibm系统上使用ibmjava,那么它的提供者(不同于普通的sun/oracle/openjdk提供者)是fips140验证的,不收取额外费用。

u1ehiz5o

u1ehiz5o2#

api的设计并不是基于用户必须使用bouncycastle来提供加密服务的假设,这一点是正确的,一个现成的例子就是人们使用fips提供者,比如bcfips。
尽管对前面的回答有一个小小的修正,bcfipsjava提供商没有许可证费用或类似的费用,作为项目的一个成员,看到有人这样说,我有点不安。我很想知道这是从哪里传来的。
我们确实有一个针对fips和非fips用户的支持计划,它确实提供了对正在进行的fips版本的早期访问,这是它的一部分,而且确实需要成本(这就是我们资助一切的方式)。然而,实际发布的fipsjar,一旦在bouncycastle.org上发布,就按照bc许可证授权,这基本上是mitx11许可证,就像我们所有其他已发布的作品一样。我希望这能消除混乱。

相关问题