C# 创建签名SHA256withRSA X509Certificate2 PrivateKey结果为空值

C# 创建签名SHA256withRSA X509Certificate2 PrivateKey结果为空值,c#,cryptography,bouncycastle,C#,Cryptography,Bouncycastle,我想使用签名算法SHA256withRSA对数据(文本)进行签名,该算法使用从.pem文件获得的私钥,如下所示 Bag Attributes friendlyName: name localKeyID: 54 69 6D 65 20 31 36 30 30 39 33 31 31 30 31 36 38 33 Key Attributes: <No Attributes> -----BEGIN ENCRYPTED PRIVATE KEY----- MIIFD....

我想使用签名算法SHA256withRSA对数据(文本)进行签名,该算法使用从.pem文件获得的私钥,如下所示

Bag Attributes
    friendlyName: name
    localKeyID: 54 69 6D 65 20 31 36 30 30 39 33 31 31 30 31 36 38 33 
Key Attributes: <No Attributes>
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFD....DJRM=
-----END ENCRYPTED PRIVATE KEY-----
Bag Attributes
    friendlyName: name
    localKeyID: 54 69 6D 65 20 31 36 30 30 39 33 31 31 30 31 36 38 33 
subject=/C=ID/ST=DKI/L=Jakarta/O=Organisasi Name A/OU=Organisasi Unit A/CN=PT A
issuer=/C=ID/ST=DKI/L=Jakarta/O=Organisasi Name A/OU=Organisasi Unit A/CN=PT A
-----BEGIN CERTIFICATE-----
MIIDZ....7YhRU=
-----END CERTIFICATE-----
我还尝试使用它来解密
expectedResult

我只需要使用从pem文件获得的私钥对数据进行签名

string pemPath = @"C:\Users\User\Desktop\API_Portal.pem";
string toSign = "fceda4da-ae95-4d14-8cb6-eef392139a1b|2020-05-12T16:12:54.893T+0700";
string expectedResult = "zlghNQa+f7ROAD1mFTDzNb+EXdWX2GGY7m3Xn0Sw/pl33TxOMzO8GfKsuqIJeCYqrZ2S/E5AZeTH2dW/XGI1/gBDGactOphDsRWnV0TU0A9YeGf3qFymYw5IjX5By7ltX/PxTsxu1iU/QgGl2ommYZhdWWPBDAYbAFr0hjsZG7pIEa9HTUnNeodoILXDiz8rJOICBXR5OMTsMxD4qOWxz3cDfrIoxw6OuZ3Azr9KwF3nVUM6Wew8hG+i3a4XQ8SptFVcB9HJMv3OGxOQQIrGkj1ygE9nN4d0KoV6VOY8TU4py6Z7caC45H2Rij9rIW1kp9Wc5pgt56cssFzV6mg5jg==";
var toSignBytes = Encoding.UTF8.GetBytes(toSign);

var str = System.IO.File.ReadAllText(pemPath);
byte[] keyBuffer = GetBytesFromPEM(str, "ENCRYPTED PRIVATE KEY");
var rsapkey = OpenSslKey.DecodeRSAPrivateKey(keyBuffer); // NULL HERE
//var result = rsapkey.SignData(toSignBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
//bool same = result == expectedResult;
using (var reader = File.OpenText(pemPath))
{
    var keyPair = (AsymmetricCipherKeyPair)new PemReader(reader).ReadObject(); //NULL HERE

    var decryptEngine = new Pkcs1Encoding(new RsaEngine());
    decryptEngine.Init(false, keyPair.Private);

    var bytesToDecrypt = Convert.FromBase64String(expectedResult);

    var decrypted = Encoding.UTF8.GetString(decryptEngine.ProcessBlock(bytesToDecrypt, 0, bytesToDecrypt.Length));

    var same = decrypted == toSign;
}