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] Dx 故障处理“javax/crypto/BadPaddingException.class”:

不构建核心库时对核心类(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] 转换为 Dalvik 格式失败,错误 1

我不知道为什么这些代码在 android 上无法正常运行...

4

1 回答 1

0

我也遇到这个问题;

这通常是由于在您的应用程序项目中无意中包含了核心库文件;

你的包与 android.jar 冲突;

于 2013-12-26T08:32:10.440 回答