Spongycastle在Android上加载时缺少许多算法

Geo*_*los 2 android bouncycastle proguard spongycastle

在这个stackoverflow答案中,您可以看到一个代码,用于打印所有可用的提供程序和相应的算法:如何找出我的JVM支持哪些算法[加密]?

我使用的是最新版本的Spongycastle,当我要求在Android上获取Spongycastle(“ SC”)的算法时,我只会得到一些算法。实际上,我得到的清单非常有限

provider: SC
algorithm: PBEWITHMD5ANDDES
algorithm: PBEWITHSHA256AND192BITAES-CBC-BC
algorithm: OLDHMACSHA384
algorithm: PBEWITHHMACSHA
algorithm: PBEWITHMD5ANDDES
algorithm: PKCS12PBE
algorithm: PBEWITHSHAAND128BITAES-CBC-BC
algorithm: IES
algorithm: PKIX
algorithm: RFC3280
algorithm: ISO9797ALG3MAC
algorithm: PBEWITHHMACSHA1
algorithm: CERTIFICATE
algorithm: PBEWITHSHAAND40BITRC2-CBC
algorithm: PBEWITHSHA1ANDDES
algorithm: PBEWITHMD5AND256BITA
Run Code Online (Sandbox Code Playgroud)

另一方面,当我要求在我的linux机器上获取SC的算法时,我会得到更多的算法。我还没有算出它们,但是它的列表比上面看到的要长10倍。

其余所有算法都去了哪里??

因为此项目不是典型的android-java项目,而是Android-Scala项目,所以我必须在每次执行时都使用Proguard。对于缺少的算法,这是否起任何作用?还是其他?

注意1:我正在使用SC生成密钥对,并使用OpenPGP加密和解密

注意2:已使用OpenJDK-6,用于公钥加密的RSA算法以及作为随机对称密钥的BLOWFISH算法对源代码进行了测试,以在Linux机器上完美运行

Rob*_*ley 5

您可能需要包括SpongyCastle OpenPGP API jar,因此请检查是否包括以下内容:

http://rtyley.github.com/spongycastle/#downloads

除此之外,ProGuard配置问题将是显而易见的竞争者。尝试在您的proguard配置文件中指定以下内容:

-keep class org.spongycastle.**
Run Code Online (Sandbox Code Playgroud)

  • @GeorgePligor仅供参考,只要一个-keep类org.spongycastle.jcajce.provider。**`就足以让ECDSA提供者为我服务。您能否检查一下是否同样适用,如果可以,请更新您的答案? (4认同)
  • 我可以确认这些都不是:`-keep class org.spongycastle.openpgp.**`、`-keep class org.spongycastle.bcpg.**`、`-keep class org.spongycastle.jce.**`、 `-keep class org.spongycastle.crypto.**`,有效。如果上面的每一个都被使用而不是`-keep class org.spongycastle.**` 那么算法不会被保留 (2认同)