0

次のようにPKCS10リクエストを生成しようとしています(PCで動作しています)

package exam.blowfishcipher;

import java.io.FileWriter;
import java.io.OutputStreamWriter;
import java.security.KeyPair;
//import java.security.KeyPairGenerator;
import java.security.SecureRandom;

import javax.security.auth.x500.X500Principal;

import org.bouncycastle.jce.PKCS10CertificationRequest;
import org.bouncycastle.openssl.PEMWriter;

import android.os.Environment;
import chapter6.PKCS10ExtensionExample;



public class PKCS10Generater
{
public static PKCS10CertificationRequest generateRequest(
        KeyPair pair)
        throws Exception

        {           
         return new PKCS10CertificationRequest(
                 "SHA256withRSA",
                 new X500Principal("CN=Test CA Certificate"),
                 //new X500Principal("CN=end"),
                 pair.getPublic(),
                 null,
                 pair.getPrivate());
        }

public static void pemEncodeToFile(String filename, Object obj, char[] password) throws Exception{
    PEMWriter pw = new PEMWriter(new FileWriter(filename));
       if (password != null && password.length > 0) {
           pw.writeObject(obj, "DESEDE", password, new SecureRandom());
       } else {
           pw.writeObject(obj);
       }
       pw.flush();
       pw.close();
}

public static void reqGen() throws Exception
{
    //create the keys
    /*
    KeyPairGenerator kpGen = KeyPairGenerator.getInstance("RSA", "BC");
    //KeyPairGenerator kpGen = KeyPairGenerator.getInstance()

    kpGen.initialize(512, chapter4.Utils.createFixedRandom());

    KeyPair pair=kpGen.generateKeyPair();
    */
    //PKCS10CertificationRequest request = generateRequest(pair);

    KeyPair pair = chapter8.Utils.generateRSAKeyPair();
    //PKCS10CertificationRequest request = PKCS10ExtensionExample.generateRequest(pair);
    PKCS10CertificationRequest request = PKCS10ExtensionExample.generateRequest(pair);
    //System.out.println(request);
    //KeyPair pair = chapter6.Utils.generateRSAKeyPair();
    //PKCS10CertificationRequest request = generateRequest(pair);




    pemEncodeToFile(Environment.getExternalStorageDirectory()+"pkcs10.req", request, null);
    PEMWriter pemWrt = new PEMWriter( new OutputStreamWriter(System.out));
    pemWrt.writeObject(request);
    pemWrt.close();

    /////////////////writing private key
    //PEMWriter pemWrt1 = new PEMWriter(new OutputStreamWriter(System.out));
    //pemWrt1.writeObject(pair.getPrivate());
    //pemEncodeToFile("userPrivate.key", pair.getPrivate(), null);
    //pemWrt1.close();
    /////
    /////

    ////
    //FileOutputStream fOut = new FileOutputStream("pkcs10.req");
    //fOut.write((request.getEncoded()));
    //fOut.write(sw.toString());
    //fOut.close();
    //pemWrt.close();


}

}

コンソール出力からのエラーメッセージは次のとおりです

[2013-01-31 02:15:05 - BlowfishCipher] 「javax/crypto/BadPaddingException.class」を処理する Dx のトラブル:

コア ライブラリを構築しない場合のコア クラス (java.* または javax.*) の不適切な使用または誤った使用。

これは多くの場合、IDE (Eclipse など) を使用しているときに、コア ライブラリ ファイルをアプリケーションのプロジェクトに誤って含めたことが原因です。コア クラスを意図的に定義していないことが確実な場合は、これが何が起こっているかの最も可能性の高い説明です。

ただし、実際にはコア名前空間でクラスを定義しようとしている可能性があります。そのソースは、たとえば非 Android 仮想マシン プロジェクトから取得した可能性があります。これは確実に機能しません。少なくとも、アプリとプラットフォームの将来のバージョンとの互換性が損なわれます。また、合法性が疑わしいこともよくあります。

アプリケーションをコンパイルするのではなく、完全な仮想マシン ディストリビューションを作成する一部としてのみ適切なコア ライブラリをビルドする場合は、「--core-library」オプションを使用してこのエラー メッセージを抑制します。

「--core-library」を使用しても実際にはアプリケーションをビルドしている場合は、アプリケーションがまだビルドまたは実行に失敗する可能性があることに注意してください。たとえば、オペレーティング システムをアップグレードすると、アプリケーションが機能しなくなったことに気付いた顧客が怒っていることに備えてください。この問題の責任はあなたにあります。

たまたまコア パッケージにあるコードを合法的に使用している場合、最も簡単で安全な代替手段は、そのコードを再パッケージ化することです。つまり、問題のクラスを独自のパッケージ名前空間に移動します。これは、コア システム クラスと競合しないことを意味します。JarJar は、この取り組みに役立つツールです。これができないとわかった場合、それはあなたがたどっている道が最終的に痛み、苦しみ、悲しみ、嘆きにつながることを示しています.

[2013-01-31 02:15:05 - BlowfishCipher] Dx 1 エラー。中止 [2013-01-31 02:15:05 - BlowfishCipher] エラー 1 で失敗した Dalvik 形式への変換

Androidでコードが正しく動作しない理由がわかりません...

4

1 に答える 1

0

私もこの問題に遭遇しました。

これは多くの場合、コア ライブラリ ファイルをアプリケーションのプロジェクトに誤って含めたことが原因です。

パッケージが android.jar と競合します。

于 2013-12-26T08:32:10.440 に答える