我正在编写一个java代码来生成 key 并将它们保存在文件中,我正在使用BouncyCaSTLe
库使用pemwriter将私钥写入.pem文件(如果它在PKCS#1中)并使用常规 FileOutputStream 将其导出到 PKCS#8。
现在,当导出到 DER 时,尝试将其导出到 PKCS#1 时就会出现问题。
我搜索了很多,但找不到合适的方法来编码 PKCS#1 中的私钥或将 java 私钥 (PKCS#8) 的常规编码转换为 PKCS#1,或者您是否可以指导我转换 PrivateKey
到 RSAPrivateKey
或 DSAPrivateKey
或 ECPrivateKey
。这是我要导出的代码片段
JcePEMEncryptorBuilder builder = new JcePEMEncryptorBuilder("DES-EDE3-CBC");
PEMEncryptor enc = builder.build(password);
FileOutputStream fis = new FileOutputStream(new File(privatekey.der));
if (isPKCS8) {
if (!encrypt) {
fis.write(privateKeyBytes);
} else {
fis.write(enc.encrypt(privateKeyBytes));
}
fis.flush();
fis.close();
其中 privateKeyBytes 是 PrivateKey.getEncoded() 返回的字节。
它们位于 PKCS#8 中,如果我可以将 PrivateKey 转换为 RSAPrivateKey 或 DSAPrivateKey,它们代表 PKCS# 中的私钥1
格式
最佳答案
显然您可以使用类型信息并执行类转换
PrivateKey privKey = ...;
if (privKey instance of RSAPrivateKey) {
RSAPrivateKey rsaPrivKey = (RSAPrivateKey)privKey;
if (privKey instance of DSAPrivateKey) {
DSAPrivateKey dsaPrivKey = (DSAPrivateKey)privKey;
if (privKey instance of ECPrivateKey) {
ECPrivateKey ecPrivKey = (ECPrivateKey)privKey;
}
关于java - 将 .der 文件中的私钥导出为 PKCS#1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20451728/