如何在Java中解密受密码保护的RSA密钥?

3

我正在编写一段代码,用于消耗一个私钥来加密和解密消息。 问题在于我使用的密钥受到密码短语的保护。因此,在使用它进行加密和解密之前,我必须先解密密钥本身。 这是密钥内容的头部:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,E51B4CCF38530A32

b9gvBvJNyUxA/2AH5mb+7dNcIns05EIXlbiM47xSUiQZgOdbP5ZHy5WL6S+uxU7s
.
.
.
-----END RSA PRIVATE KEY-----

我该如何在Java中实现这个功能?


我需要你的帮助,如果你知道有人能够帮忙,那就太好了。 - Mariette SAUSON
您不使用私钥进行加密,而是使用公钥进行加密。您需要使用私钥进行解密。或者,您可以使用私钥签名并使用公钥验证。请澄清一下。 - user207421
这是一种非对称加密技术。因此,如果我使用公钥加密,就需要使用私钥解密,反之亦然。 - Mariette SAUSON
1个回答

3

这是一个以PKCS#1格式加密的私有RSA密钥,以PEM编码,使用BouncyCastle导入最方便:

import java.io.FileReader;
import java.security.PrivateKey;
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
import org.bouncycastle.openssl.PEMEncryptedKeyPair;
import org.bouncycastle.openssl.PEMKeyPair;
import org.bouncycastle.openssl.PEMParser;
import org.bouncycastle.openssl.bc.BcPEMDecryptorProvider;
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;

...

String path = "...";
String password = "...";
try (PEMParser pemParser = new PEMParser(new FileReader(path))){

    PEMEncryptedKeyPair encKeyPair = (PEMEncryptedKeyPair)pemParser.readObject();
    PEMKeyPair keyPair = encKeyPair.decryptKeyPair(new BcPEMDecryptorProvider(password.toCharArray()));

    JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
    PrivateKeyInfo privKeyInfo = keyPair.getPrivateKeyInfo();
    PrivateKey privKey = converter.getPrivateKey(privKeyInfo);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接