【问题标题】:Spongycastle is missing many algorithms when loaded on androidSpongycastle 在 android 上加载时缺少许多算法
【发布时间】:2013-04-10 06:56:31
【问题描述】:

在这个 stackoverflow 答案中,您可以看到打印所有可用提供程序和相应算法的代码:How to find out what algorithm [ encryption ] are supported by my JVM?

我正在使用最新版本的 spongycastle,当我要求获取 Spongycastle (“SC”) 在 android 上 的算法时,我只得到了少数算法。事实上,我得到了这个非常有限的列表

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

另一方面,当我要求在我的 linux 机器上获取 SC 的算法时,我得到了更多的算法。我没有数过它们,但它比你在上面看到的要长 10 倍。

所有其他算法都去哪儿了??

因为这个项目不是一个典型的 android-java 项目,而是一个 Android-Scala 项目,所以我必须在每次执行时使用 Proguard。这对缺失的算法有什么作用吗?还是其他原因?

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

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

【问题讨论】:

  • 嗯,你在比较两个完全不同的东西。我的猜测是 DVM 并没有实现完整 JVM 的所有算法。
  • 这些算法不应该是库自带的吗?因为如果这些是唯一可用的库,我将永远无法使用 OpenPGP。我需要 RSA、BLOWFISH、CAST5 和其他算法。还有一个事实是,有些应用程序已经成功使用 spongycastle 来使用 openpgp 进行加密

标签: android proguard bouncycastle spongycastle


【解决方案1】:

您可能需要包含 SpongyCastle OpenPGP API jar,因此请检查您是否包含:

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

除此之外,ProGuard 配置问题将是明显的竞争者。尝试在您的 proguard 配置文件中指定类似的内容:

-keep class org.spongycastle.**

【讨论】:

  • 令我惊讶的是,可用算法的列表仍然很短,但是在您的 proguard config RSA 出现在列表中之后,我可以完成我的工作。所以现在这似乎可行,但我需要做更多的测试。
  • 不幸的是,我的 apk 大小实际上翻了一番!也许您可以指出我应该保留海绵城堡的哪些部分,因为在 apk 中保留整个库大约要多 2.5MB!
  • @GeorgePligor 很遗憾,您没有向我们提供足够的信息来复制您的工作 - 只有使用您的源代码的完整副本,我们才能确保您保留了足够的 proguard 以确保您的应用作品。一个建议:打印出你的 caode 从 SC 返回的实现类的类名,并从保留这些开始。
  • 我可以确认这些:-keep class org.spongycastle.openpgp.**-keep class org.spongycastle.bcpg.**-keep class org.spongycastle.jce.**-keep class org.spongycastle.crypto.** 都不起作用。如果使用上述每一项而不是-keep class org.spongycastle.**,则不会保留算法
  • @GeorgePligor 仅供参考,只需 -keep class org.spongycastle.jcajce.provider.** 就足以为我保留 ECDSA 提供商。您能否检查一下这是否也适合您,如果可以,请更新您的答案?
猜你喜欢
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
相关资源
最近更新 更多