为什么我在尝试使用bouncycastle进行加密时会在android中获得NoSuchAlgorithmException?

时间:2013-03-28 23:22:58

标签: android rsa bouncycastle

首先请注意,我的linux机器上已经测试了所有代码。有相关的单元测试来确认它。但是代码在android上不起作用。

我在我的项目中包含了我自己的 bouncycastle v1.48 库。我不确定 android 是否已将此库嵌入,我希望这不会带来任何冲突(?)

我用作公钥算法标记 RSA_GENERAL,这在创建这样的密钥时非常有用:

new PGPSecretKey(
  PGPSignature.DEFAULT_CERTIFICATION,
  publicKeyAlgorithmTag,
  publicKey,
  privateKey,
  new Date,
  identity.toString,
  symmetricKeyAlgorithmTag,
  passPhrase,
  null,
  null,
  new SecureRandom(),
  BC_PROVIDER_NAME
);

但是在创建密钥对时,我没有使用此标记,因为创建发生在java.security,而不是bouncycastle。这是相关代码的一部分(在Scala中):

val generator = KeyPairGenerator.getInstance(PUBLIC_KEY_ALGORITHM_STRING, BC_PROVIDER_NAME);
generator.initialize(KEY_SIZE_IN_BITS, new SecureRandom());
generator.generateKeyPair();

您在上面看到的公钥算法字符串只是字符串“RSA”

注意:我已经使用对称密钥算法进行了NoSuchAlgorithmException,但是我通过从CAST5切换到BLOWFISH来轻松克服它。

您对我在哪里开始寻找解决方案或问题有什么建议吗?谢谢

1 个答案:

答案 0 :(得分:4)

  

我在我的项目中包含了我自己的bouncycastle v1.48库。

那不行。 Android有自己的修剪版Bouncy Castle(主要是支持javax.crypto),Android将使用它的库,而不是你的库。请尝试切换到spongycastle。关于spongycastle的Here is a StackOverflow answer由图书馆作者撰写。

如spongycastle文档中所述,您必须将所有导入从org.bouncycastle.*更改为org.spongycastle.*。此外,您需要提供提供商名称的任何地方,您需要将其从"BC"更改为"SC"