2010-01-07 29 views
3

我正在尝试在Android上使用BouncyCastle来实现ECDH和EL Gamal。我已经添加了BouncyCastle的jar文件(bcprov-jdk16-144.jar)和写一些代码,我的电脑JVM工作但是当我试着将它移植到我的Android应用程序,它抛出:未提供Bouncycastle加密算法

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:信息/ dalvikvm(1054):DexOpt:

编制进行了大量的充气城堡班时,我也越来越以下两个错误不解决含糊类'Lorg/BouncyCastle的/ ASN1/ASN1Encodable;'

01-07 17:17:42.548:DEBUG/dalvikvm(1054):DexOpt:未验证 'Lorg/BouncyCastle的/ ASN 1/ESS/OtherSigningCertificate;':多重定义

我在做什么错?

+0

好,我现在尝试添加BouncyCastle的作为一个单独的.jar文件,现在当我检查什么算法是可用的它说ECDH和El Gamal都可用,但仍然发生完全相同的错误和异常 – 2010-01-08 16:34:27

+0

你有没有解决这个问题? – mcorley 2011-05-18 03:50:36

+0

请更新你的问题,并告诉我们你做了什么来解决它。 – 2012-10-01 13:40:54

回答

1

我不知道这是否回答你的问题,但一些BouncyCastle库已经在Android SDK中。也许关于歧义类的错误是因为BouncyCastle已经包含在模拟器中。

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

+0

嗯好吧,这是否意味着我将无法手动将源代码放入密钥生成器中? – 2010-01-08 10:48:09

+0

对不起,我没有更多的信息。我已经告诉过你,我通过Google找到了。 – bramp 2010-01-08 14:16:58

1

如果您浏览Android代码,您将看到并非所有的BouncyCastle功能都包含在内。 见libcore /安全/ SRC /主/ JAVA /组织/ BouncyCastle的/ JCE /提供者/ BouncyCastleProvider.java

特别ECDH的输出被注释,这意味着在编译它将从机器人被完全排除在外jar文件。

9

您可能想要Spongy Castle - 我为Bouncy Castle制作的专门针对Android的重新打包。由于这里要注意:

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

... Android平台不幸集成充气城堡,这也使得由于类加载器冲突安装库难的更新版本的简化版本 - 即使你添加你完整的BC罐子,你没有得到你添加的额外课程。

海绵城堡是完全取代Bouncy城​​堡加密库随Android附带的残废版本。有一对夫妇的小的变化,使其在Android上工作:

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