1

我正在尝试使用 BouncyCastle 1.47(bckpix-jdk15on-147.jarbcprov-jdk15on-147.jar)将私钥和关联的签名证书写入 Android 设备上的 PKCS12(.p12)文件,并希望更改密钥加密算法和其他包属性。我正在尝试实现与 OpenSSLPKCS12_create()功能相同的控件,您可以在其中设置:

  • 私钥加密算法
  • 证书加密算法
  • 加密迭代次数
  • MAC 迭代次数

到目前为止,我已经看到了使用PKCS12BagAttributeCarrieror PKCS12SafeBagBuilderwith 的建议PKCS12PfxPduBuilder,但无法弄清楚如何更改上面列出的四个属性(或正确使用它们)。

有谁知道目前首选哪种方法,或者在改变PKCSObjectIdentifiers.pkcs_9_at_friendlyName和之外有这些方法的经验或例子PKCSObjectIdentifiers.pkcs_9_at_localKeyIdKeyStore在写入文件之前,我应该使用对象以外的东西作为容器吗?

我能够创建 PKCS12 文件并注意到两个迭代计数的默认值是 1024,私钥算法是pbeWithSHA1And3-KeyTripleDES-CBC,证书算法是pbeWithSHA1And40BitRC2-CBC

这是我用来创建 PKCS12 文件的内容:

Context appContext = ...;
String p12Filename = ...;
String p12Password = ...;
String p12Alias = ...;
RSAPrivateKey privateKey = ...;
X509Certificae signedCert = ...;

KeyStore store = KeyStore.getInstance("PKCS12", "BC");
store.load(null, null);
X509Certificate[] chain = new X509Certificate[1];
chain[0] = signedCert;

store.setKeyEntry("UserCredentials", privateKey, p12Password.toCharArray(), chain);

FileOutputStream fos;
File outputDir = appContext.getFilesDir();
File pkcs12File = new File(outputDir, p12Filename);
fos = new FileOutputStream(pkcs12File);

store.store(fos, p12Password.toCharArray());
fos.flush();
fos.close();

提前致谢!

4

1 回答 1

1

是的,org.bouncycastle.pkcs 包是正确的地方。

为了准备 1.49,在这个领域做了大量的工作。目前,我建议在http://www.bouncycastle.org/betas上获取该版本您可以使用 PKCS 包的测试类作为参考,还有一个示例程序和新的http://www.cryptoworkshop.com/guide上的指南

问候,

大卫

于 2013-03-12T23:21:18.457 回答