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