为什么 JcaPEMKeyConverter 有一个 setProvider 方法?
why does JcaPEMKeyConverter have a setProvider method?
我明白为什么 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 之外的任何“提供者”都会提供替代品......
我不知道 'namespacing' 您认为正在使用什么。 JcaPEMKeyConverter
使用 JCA 来实现它需要的加密操作,它可以使用 any 提供所需操作的 JCA 提供程序; JCA 的几乎整个 要点 是提供者使用相同的 API(或技术上 SPI,服务提供者 接口)以便您可以有选择地使用不同的提供者进行相同的操作。
bcpkix bcpg 和 bcmail 库中的某些(也许是大多数)操作可以使用 JCA API(使用任何合适的 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 add-on 库的人确实经常拥有并且也能够使用 Bouncy 提供程序,但并非总是如此。例如,美国联邦政府系统需要使用某些在 FIPS140 下验证的密码函数(主要是原语)(目前为修订版 -2,很快 -3),虽然 Bouncy 确实有 FIPS140 实现,但在商业上使用它需要付费,而如果您使用的是IBM Java 在某些 IBM 系统上它有提供程序(不同于常见的 Sun/Oracle/OpenJDK 提供程序),这些提供程序经过 FIPS140 验证,无需额外付费。
正确的是,API 的设计并非基于用户必须使用 BouncyCastle 来提供加密服务的假设 - 一个现成的例子就是人们使用 FIPS 提供程序,例如 BCFIPS .
虽然对前面的答案做了一个小的更正,但 BCFIPS Java 提供商没有许可费或类似费用,作为该项目的成员之一,看到有人让我感到非常不安说明。我很想知道这是从哪里听到的。
我们确实有一个针对 FIPS 和 non-FIPS 用户的支持计划,它确实提供了对 in-progress FIPS 版本的早期访问作为它的一部分,并且确实需要成本(这就是我们为一切提供资金的方式) .然而,实际发布的 FIPS jar,一旦在 bouncycastle.org 上发布,就会根据 BC 许可证获得许可,这基本上是 MIT X11 许可证,就像我们所有其他已发布的作品一样。我希望这能消除困惑。
我明白为什么 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 之外的任何“提供者”都会提供替代品......
我不知道 'namespacing' 您认为正在使用什么。 JcaPEMKeyConverter
使用 JCA 来实现它需要的加密操作,它可以使用 any 提供所需操作的 JCA 提供程序; JCA 的几乎整个 要点 是提供者使用相同的 API(或技术上 SPI,服务提供者 接口)以便您可以有选择地使用不同的提供者进行相同的操作。
bcpkix bcpg 和 bcmail 库中的某些(也许是大多数)操作可以使用 JCA API(使用任何合适的 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 add-on 库的人确实经常拥有并且也能够使用 Bouncy 提供程序,但并非总是如此。例如,美国联邦政府系统需要使用某些在 FIPS140 下验证的密码函数(主要是原语)(目前为修订版 -2,很快 -3),虽然 Bouncy 确实有 FIPS140 实现,但在商业上使用它需要付费,而如果您使用的是IBM Java 在某些 IBM 系统上它有提供程序(不同于常见的 Sun/Oracle/OpenJDK 提供程序),这些提供程序经过 FIPS140 验证,无需额外付费。
正确的是,API 的设计并非基于用户必须使用 BouncyCastle 来提供加密服务的假设 - 一个现成的例子就是人们使用 FIPS 提供程序,例如 BCFIPS .
虽然对前面的答案做了一个小的更正,但 BCFIPS Java 提供商没有许可费或类似费用,作为该项目的成员之一,看到有人让我感到非常不安说明。我很想知道这是从哪里听到的。
我们确实有一个针对 FIPS 和 non-FIPS 用户的支持计划,它确实提供了对 in-progress FIPS 版本的早期访问作为它的一部分,并且确实需要成本(这就是我们为一切提供资金的方式) .然而,实际发布的 FIPS jar,一旦在 bouncycastle.org 上发布,就会根据 BC 许可证获得许可,这基本上是 MIT X11 许可证,就像我们所有其他已发布的作品一样。我希望这能消除困惑。