如何使用java将RSA私钥导出为pem格式

时间:2015-10-31 11:24:52

标签: java security cryptography private-key nss

我有私钥,我想导出为.pem格式 问题是,当我调用privateKey.getEncoded()时,我得到null。 但我可以获得所有信息,如指数,模数等等(全部来自接口RSAPrivateKey)。 privateKey是org.mozilla.jss.pkcs11.PK11RSAPrivateKey对象。

    public String exportPrivateKey(PrivateKey privateKey) throws Throwable {
    byte[] encoded = privateKey.getEncoded();//this is null:<
    String body = DatatypeConverter.printBase64Binary(encoded);

    return RSA_PRIVATE_HEADER + body + RSA_PRIVATE_FOOTER;
}

如何将该密钥导出到pem文件?

1 个答案:

答案 0 :(得分:1)

我在PKCS12Export中找到的方法,它可以正常工作:P

private byte[] getEncodedKey(PrivateKey var1) throws Exception {
    CryptoManager var2 = CryptoManager.getInstance();
    CryptoToken var3 = var2.getInternalKeyStorageToken();
    KeyGenerator var4 = var3.getKeyGenerator(KeyGenAlgorithm.DES3);
    SymmetricKey var5 = var4.generate();
    KeyWrapper var6 = var3.getKeyWrapper(KeyWrapAlgorithm.DES3_CBC_PAD);
    byte[] var7 = new byte[]{(byte)1, (byte)1, (byte)1, (byte)1, (byte)1, (byte)1, (byte)1, (byte)1};
    IVParameterSpec var8 = new IVParameterSpec(var7);
    var6.initWrap(var5, var8);
    byte[] var9 = var6.wrap(var1);
    Cipher var10 = var3.getCipherContext(EncryptionAlgorithm.DES3_CBC_PAD);
    var10.initDecrypt(var5, var8);
    return var10.doFinal(var9);
}