【发布时间】:2013-12-26 16:32:10
【问题描述】:
我正在尝试按如下方式生成 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 上无法正常运行...
【问题讨论】:
-
在 Android 上使用
SpongyCastle而不是BouncyCastle
标签: android eclipse certificate