我使用输入到C#类的私钥密码解码私钥时遇到错误。我认为问题是因为关键是:
抛出的异常是
Org.BouncyCastle.Crypto.InvalidCipherTextException
带有消息
pad block corrupted
发生在object privateKeyObject = pemReader.ReadObject();
以下是提供给我的示例私钥:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,C7E12029C6ED8D89
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
-----END RSA PRIVATE KEY-----
以下是私钥密码:
SPH?!(C7ryh~juR>
以下是代码:
private readonly string _pubKey;
private readonly string _privateKey;
private readonly string _privateKeyPass;
public RSAKeyEncryption(string pubKey, string privateKey, string privateKeyPass)
{
_pubKey = pubKey;
_privateKey = privateKey;
_privateKeyPass = privateKeyPass;
}
private AsymmetricCipherKeyPair DecodePrivateKey()
{
TextReader textReader = new StringReader(_privateKey);
PemReader pemReader = new PemReader(textReader, new PasswordFinder(_privateKeyPass));
object privateKeyObject = pemReader.ReadObject();
AsymmetricCipherKeyPair keyPair = (AsymmetricCipherKeyPair)privateKeyObject;
return keyPair;
}
答案 0 :(得分:1)
以下代码对我有用:
// https://stackoverflow.com/a/6038944/1911064
StreamReader sr = new StreamReader(@"E:\AK\temp\key.pem");
string privateKeyPass = "SPH?!(C7ryh~juR>";
var pf = new PasswordFinder(privateKeyPass);
PemReader pr = new PemReader(sr, pf);
AsymmetricCipherKeyPair KeyPair = (AsymmetricCipherKeyPair)pr.ReadObject();
RSAParameters rsa =
DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)KeyPair.Private);