3

ECDH と EL Gamal を実装するために Android で BouncyCastle を使用しようとしています。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アルゴリズムを取得できません。問題ありません。

多くの弾むキャッスルクラス用にコンパイルすると、次の2つのエラーも発生します。

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;' を検証していません: 複数の定義

私は何を間違っていますか?

4

3 に答える 3

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 プロバイダー名がBCではなくSCになりました
于 2011-07-14T13:56:06.833 に答える
1

Android コードを参照すると、すべての BouncyCastle 機能が含まれているわけではないことがわかります。libcore/security/src/main/java/org/bouncycastle/jce/provider/BouncyCastleProvider.java を参照してください。

特に、ECDH の出力はコメント アウトされています。これは、コンパイル時に Android jar ファイルから完全に除外されることを意味します。

于 2010-11-19T15:03:10.277 に答える
1

これがあなたの質問に答えるかどうかはわかりませんが、BouncyCastle ライブラリの一部は既に Android SDK に含まれています。おそらく、あいまいなクラスに関するエラーは、BouncyCastle がエミュレーターに既に含まれているためです。

javax.crypto.Cipher クラス経由で使えるようです。

于 2010-01-08T01:29:01.857 に答える