我正在尝试使用 BouncyCastle 1.47(bckpix-jdk15on-147.jar
和bcprov-jdk15on-147.jar
)将私钥和关联的签名证书写入 Android 设备上的 PKCS12(.p12)文件,并希望更改密钥加密算法和其他包属性。我正在尝试实现与 OpenSSLPKCS12_create()
功能相同的控件,您可以在其中设置:
- 私钥加密算法
- 证书加密算法
- 加密迭代次数
- MAC 迭代次数
到目前为止,我已经看到了使用PKCS12BagAttributeCarrier
or PKCS12SafeBagBuilder
with 的建议PKCS12PfxPduBuilder
,但无法弄清楚如何更改上面列出的四个属性(或正确使用它们)。
有谁知道目前首选哪种方法,或者在改变PKCSObjectIdentifiers.pkcs_9_at_friendlyName
和之外有这些方法的经验或例子PKCSObjectIdentifiers.pkcs_9_at_localKeyId
?KeyStore
在写入文件之前,我应该使用对象以外的东西作为容器吗?
我能够创建 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();
提前致谢!