【问题标题】:How I know if I using Bouncy Castle from jar or the one implemented in Android?我怎么知道我是使用 jar 中的 Bouncy Castle 还是 Android 中实现的那个?
【发布时间】:2018-03-15 16:03:46
【问题描述】:

我如何知道我是使用 jar 中的 Bouncy Castle 还是 Android 中实现的 Bouncy Castle? 我已经从 https://www.bouncycastle.org/latest_releases.html 下载并将 jar 添加到我的 Android Studio 项目中。 如何检查我是否正在使用它(我下载的那个)?

【问题讨论】:

  • 您可以尝试使用 SpongyCastle 代替
  • @EpicPandaForce 因为是...请填写。

标签: android bouncycastle


【解决方案1】:

至少在最近几个版本中,Android 已通过将它们使用的 bouncycastle 类重命名为 com.android.** 来修复命名空间冲突。我不确定这是什么时候发生的,但是查看https://android.googlesource.com/platform/external/bouncycastle/+refs 的源代码存储库表明更改从 Ice Cream Sandwich 开始——API 级别 14。

我不确定他们对基于字符串的提供程序查找做了什么,例如Cipher.getInstance("AES/GCM/PKCS5PADDING", "BC")。但是,JCE 中的每个 getInstance() 方法也有一个版本,您可以在其中显式指定 Provider 类,例如Cipher.getInstance("AES/GCM/PKCS5PADDING", new org.bouncycastle.jce.provider.BouncyCastleProvider()) 消除了任何歧义。

【讨论】:

【解决方案2】:

Android 平台捆绑了 Bouncy Castle 的受限子集,如果您将提供程序设置为名称“BC”,则默认选择该子集。 (如果你像詹姆斯所说的那样按班级做的话)

Signature.getInstance("SHA1WithRSA","BC")

使用您自己的加密提供商的替代方案:

1 包含您自己的 BouncyCastle 版本

包括 bouncycastle 的 jar,删除捆绑的提供程序并添加新的。

Security.removeProvider("BC");
BouncyCastleProvider bc = new BouncyCastleProvider();
Security.insertProviderAt(bc,1);

2 使用海绵城堡

SpongyCastle 是 Android 版 BouncyCastle 的官方重新包装。 https://rtyley.github.io/spongycastle/。包含依赖并使用“SC”而不是“BC”

 Signature.getInstance("SHA1WithRSA","SC")

为什么?

不幸的是,Android 平台附带了 Bouncy Castle 的精简版本 - 除了被削弱之外,由于类加载器冲突,它还使得安装更新版本的库变得困难。

Spongy Castle 是现有的 Bouncy Castle 库,进行了一些小改动以使其可以在 Android 上运行:

  • 所有包名已从 org.bouncycastle.* 移至 org.spongycastle.*

  • 为避免类加载器冲突,Java 安全 API 提供程序名称现在是 SC 而不是 BC

  • 没有类名更改,因此 BouncyCastleProvider 类仍然是 Bouncy,而不是 Spongy,但会移至 org.spongycastle.jce.provider 包。

【讨论】:

  • 最新版本的 Android 已将 Android 使用的 bouncycastle 类重命名为 com.android.org.bouncycastle.*,因此这不再是问题,至少对于那些版本而言。
  • @JamesKPolk 你能说出最近的时间吗?
  • @JamesKPolk 查看源代码,至少 API 17 使用您提到的“重构”版本。我相信您的评论也可以成为答案。
猜你喜欢
  • 1970-01-01
  • 2011-11-28
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 2011-07-30
相关资源
最近更新 更多