首先请注意,我的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来轻松克服它。
您对我在哪里开始寻找解决方案或问题有什么建议吗?谢谢
答案 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"
。