未提供Bouncycastle加密算法

时间:2010-01-07 17:19:38

标签: android encryption bouncycastle

我正在尝试使用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;':多个定义

我做错了什么?

3 个答案:

答案 0 :(得分:9)

你可能想要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 Security API提供商名称现在 SC 而不是 BC

答案 1 :(得分:1)

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

您似乎可以通过javax.crypto.Cipher class使用它。

答案 2 :(得分:1)

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

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