【问题标题】:Bouncycastle encryption algorithms not provided未提供 Bouncycastle 加密算法
【发布时间】:2010-01-07 17:19:38
【问题描述】:

我正在尝试将 BouncyCastle 与 android 一起使用来实现 ECDH 和 EL Gamal。我添加了 bouncycastle jar 文件 (bcprov-jdk16-144.jar) 并编写了一些适用于我的计算机 jvm 的代码,但是当我尝试将其移植到我的 android 应用程序时它会抛出:

java.security.NoSuchAlgorithmException: KeyPairGenerator ECDH implementation not found

代码示例如下:

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

java.security.KeyPairGenerator keyGen = org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator.getInstance("ECDH", "BC");
                ECGenParameterSpec ecSpec = new ECGenParameterSpec("prime192v1");

                keyGen.initialize(ecSpec, SecureRandom.getInstance("SHA1PRNG"));



                KeyPair pair = keyGen.generateKeyPair();
                PublicKey pubk = pair.getPublic();
                PrivateKey prik = pair.getPrivate();

然后我编写了一个简单的程序来查看可用的加密算法并在我的 android 模拟器和我的计算机 jvm 上运行它,代码是:

Set<Provider.Service> rar = new org.bouncycastle.jce.provider.BouncyCastleProvider().getServices();
    Iterator<Provider.Service> ir = rar.iterator();
    while(ir.hasNext())
        System.out.println(ir.next().getAlgorithm());

在 android 上,我没有得到任何 EC 算法,而在我的计算机上正常运行它很好。

在为许多充气城堡类进行编译时,我也遇到了以下两个错误:

01-07 17:17:42.548: INFO/dalvikvm(1054): DexOpt: 不解决模棱两可的类 'Lorg/bouncycastle/asn1/ASN1Encodable;'

01-07 17:17:42.548: DEBUG/dalvikvm(1054): DexOpt: 不验证 'Lorg/bouncycastle/asn1/ess/OtherSigningCertificate;': 多个定义

我做错了什么?

【问题讨论】:

  • 好的,我现在尝试将 bouncycastle 添加为单独的 .jar 文件,现在当我检查可用的算法时,它说 ECDH 和 El Gamal 都可用,但仍然会出现完全相同的错误和异常
  • 请更新您的问题并告诉我们您做了什么来解决它。

标签: android encryption bouncycastle


【解决方案1】:

您可能想要Spongy Castle - 我用 Bouncy Castle 制作的一个重新包装,专门针对 Android。如此处所述:

http://code.google.com/p/android/issues/detail?id=3280

...不幸的是,Android 平台包含了 Bouncy Castle 的精简版本,由于类加载器冲突,这也使得安装库的更新版本变得困难 - 即使您添加了完整的 BC jar,您也不会得到您添加的其他类。

Spongy Castle 完全替代了 Android 随附的 Bouncy Castle 加密库的残缺版本。有几个小改动可以让它在 Android 上运行:

  • 所有包名已从 org.bouncycastle.* 移至 org.spongycastle.* - 因此没有类加载器冲突
  • Java 安全 API 提供程序名称现在是 SC 而不是 BC

【讨论】:

    【解决方案2】:

    我不知道这是否能回答您的问题,但一些 BouncyCastle 库已经在 Android SDK 中。模糊类的错误可能是因为 BouncyCastle 已经包含在模拟器中。

    看来你可以通过javax.crypto.Cipher class使用它。

    【讨论】:

    • 嗯,这是否意味着如果不手动放入源代码,我就无法实现密钥生成器?
    • 抱歉,我没有更多信息。我已经告诉过你的内容是通过 Google 找到的。
    【解决方案3】:

    如果您浏览 Android 代码,您会发现并非所有 BouncyCastle 功能都包含在内。 请参阅 libcore/security/src/main/java/org/bouncycastle/jce/provider/BouncyCastleProvider.java

    特别是 ECDH 的输出被注释掉了,这意味着在编译时它将完全从 android jar 文件中排除。

    【讨论】:

      猜你喜欢
      • 2015-05-25
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 2012-06-02
      相关资源
      最近更新 更多