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



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

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,E51B4CCF38530A32
b9gvBvJNyUxA/2AH5mb+7dNcIns05EIXlbiM47xSUiQZgOdbP5ZHy5WL6S+uxU7s
.
.
.
-----END RSA PRIVATE KEY-----

我如何在Java中实现这一点?

这是一个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);
}

最新更新