没有提供Bouncycastle加密算法 [英] Bouncycastle encryption algorithms not provided

查看:200
本文介绍了没有提供Bouncycastle加密算法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

  java.security.NoSuchAlgorithmException:KeyPairGenerator ECDH实现未找到

代码示例是:

  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对= keyGen.generateKeyPair();
PublicKey pubk = pair.getPublic();
PrivateKey prik = pair.getPrivate();

然后,我写了一个简单的程序,看看什么加密算法可用,并在我的android模拟器和在我的电脑上,jvm的代码是:

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

在android上我没有得到任何EC算法,而在我的电脑上正常运行,这是很好的。 / p>

当编译很多弹性城堡类时,我还会收到以下两个错误:



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;':多个定义



解决方案

你可能想要海绵城堡 - 由Bouncy Castle制作的重新包装专门针对Android。如下所述:



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



... Android平台不幸融入Bouncy Castle的一个缩小版本,这也使得由于类加载器冲突而使安装更新版本的库变得困难 - 即使添加完整的BC jar也不会得到您添加的其他类。



海绵城堡是Android随附的Bouncy Castle加密库的残缺版本的完全替代品。有一些小的更改可以在Android上运行:




  • 所有包名都已从org.bouncycastle。*移动到org .spongycastle。* - 所以没有类加载器冲突

  • Java Security API提供者名称现在是 SC 而不是 BC


I'm trying to use BouncyCastle with android to implement ECDH and EL Gamal. I've added the bouncycastle jar file (bcprov-jdk16-144.jar) and written some code that works with my computers jvm however when I try and port it to my android application it throws:

java.security.NoSuchAlgorithmException: KeyPairGenerator ECDH implementation not found

A sample of the code is:

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();

I then wrote a simple program to see what encryption algorithms are available and ran it on my android emulator and on my computers jvm the code was:

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());

On android I do not get any of the EC algorithms while ran normally on my computer it's fine.

I'm also getting the following two errors when compiling for a lot of the bouncy castle classes:

01-07 17:17:42.548: INFO/dalvikvm(1054): DexOpt: not resolving ambiguous class 'Lorg/bouncycastle/asn1/ASN1Encodable;'

01-07 17:17:42.548: DEBUG/dalvikvm(1054): DexOpt: not verifying 'Lorg/bouncycastle/asn1/ess/OtherSigningCertificate;': multiple definitions

What am I doing wrong?

解决方案

You probably want Spongy Castle - a repackage I made of Bouncy Castle specifically targeted for Android. As noted here:

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

...the Android platform unfortunately incorporates a cut-down version of Bouncy Castle, which also makes installing an updated version of the libraries difficult due to classloader conflicts - even when you add your full BC jar, you don't get the additional classes you added.

Spongy Castle is a full replacement for the crippled versions of the Bouncy Castle cryptographic libraries which ship with Android. There are a couple of small changes to make it work on Android:

  • all package names have been moved from org.bouncycastle.* to org.spongycastle.* - so no classloader conflicts
  • the Java Security API Provider name is now SC rather than BC

这篇关于没有提供Bouncycastle加密算法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆