我正在编写一个java代码来生成密钥并将它们保存在文件中,我正在使用BouncyCastle
库将私钥写入.pem文件,使用pemwriter(如果它在PKCS#1中)并使用常规FileOutputStream将其导出到PKCS#8。
现在当导出到DER时,尝试在PKCS#1中导出它时会出现问题。
我搜索了很多,但找不到合适的方法来编码PKCS#1中的私钥,或者将java私钥的常规编码(PKCS#8)转换为PKCS#1,或者如果你可以指导我转换{{ 1}}到PrivateKey
或RSAPrivateKey
或DSAPrivateKey
。以下是我要导出的代码片段
ECPrivateKey
其中privateKeyBytes是它们在PKCS#8中的 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();
的返回字节,如果我可以将PrivateKey转换为RSAPrivateKey或DSAPrivateKey,则它们代表PrivateKey.getEncoded().
格式的私钥
答案 0 :(得分:0)
显然你可以使用类型信息并执行类投射
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;
}