阅读与BouncyCastle的/ spongycastle加密私钥

问题描述 投票:2回答:2

我有一个密码保护,加密的RSA私钥,这与PyCrypto(2.6.1)创建,并已根据自己的文档格式如下:PrivateKeyInfo, PKCS#8 (DER SEQUENCE), PEM (RFC1423),参见[https://www.dlitz.net/software/pycrypto/api/current/Crypto.PublicKey.RSA._RSAobj-class.html#exportKey]

我怎样才能解密用BouncyCastle的/ Spongycastle这RSA密钥?

我搜索谷歌相当长的时间,只拿出了结果,要么不会与1.50版本下工作(因为PEMReader被弃用,并得到了移除)或谁似乎无法读取这种格式PEMParser的例子。 BTW:是否有BouncyCastle的我错过任何文档?

这是我的加密私钥的标题:

-----BEGIN PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,68949227DD8A502D
xyz...

我真的很感激,如果有人可以帮助我!

java rsa bouncycastle pem pkcs#8
2个回答
8
投票

要总结一下我对这个话题herethere发现:

这里是最后的代码,如果你想获得例如模量:

// For JcaPEMKeyConverter().setProvider("BC")
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

// Using bcpkix-jdk14-1.48
PEMParser pemParser = new PEMParser(new FileReader(file));
Object object = pemParser.readObject();
JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
KeyPair kp;
if (object instanceof PEMEncryptedKeyPair)
{
    // Encrypted key - we will use provided password
    PEMEncryptedKeyPair ckp = (PEMEncryptedKeyPair) object;
    PEMDecryptorProvider decProv = new JcePEMDecryptorProviderBuilder().build(password.toCharArray());
    kp = converter.getKeyPair(ckp.decryptKeyPair(decProv));
}
else
{
    // Unencrypted key - no password needed
    PEMKeyPair ukp = (PEMKeyPair) object;
    kp = converter.getKeyPair(ukp);
}

// RSA
KeyFactory keyFac = KeyFactory.getInstance("RSA");
RSAPrivateCrtKeySpec privateKey = keyFac.getKeySpec(kp.getPrivate(), RSAPrivateCrtKeySpec.class);

return privateKey;

然后你就可以调用,例如:

privateKey.getModulus();

2
投票

使用答案你应该做到以下几点this question

File privateKeyFile = new File(privateKeyFileName); // private key file in PEM format
PEMParser pemParser = new PEMParser(new FileReader(privateKeyFile));
Object object = pemParser.readObject();
PEMDecryptorProvider decProv = new JcePEMDecryptorProviderBuilder().build(password.toCharArray());
JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
KeyPair kp;
if (object instanceof PEMEncryptedKeyPair) {
    kp = converter.getKeyPair(((PEMEncryptedKeyPair) object).decryptKeyPair(decProv));
}

然后,你可以说

PrivateKey key = kp.getPrivateKey();
© www.soinside.com 2019 - 2024. All rights reserved.