在android上生成PKCS10请求时出错

时间:2013-01-30 16:41:31

标签: android eclipse certificate

我正在尝试按如下方式生成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(例如 日食)。如果你确定你不是故意定义一个 核心类,那么这就是最可能的解释 继续。

但是,您实际上可能正在尝试在核心中定义类 命名空间,例如,您可能采用的来源 来自非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上没有正确... ...

1 个答案:

答案 0 :(得分:0)

我也遇到过这个问题;

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

你的包与android.jar冲突;