using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Digests;
using Org.BouncyCastle.Crypto.Encodings;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.OpenSsl;
public static void Main()
byte[] ciphertext = Convert.FromBase64String("g+lxEfyF/n0oxK7IThlqZbe+8SViX4lCtX3zX6WLfNehqs+e2maOXXaG/w2S40RAGJzk5YqFl9pWoIDUwf5LDPSu+YTWFCHE3AHEWYflxDq855fPa/v55bHRCA5lZpIx5omA9/cbUapkY/8SkzXqgHTQH/Y3Bqn0pAsb1gPood2nR5PnycDXlFIquFbw8gvia929iZ7y7Ws6IlkxhBYjfJ+7dY45Z7T3qDfGciZM2NUfSnfnN7hN9zfLOUwMzCRXZvMjB/gJQ6WqP37Qz0g7V+L+drmxmoqcvDEqQ/F4XOmSKxRYcwclKrrPuhxkMy860/QK4MCMnAddTKQEUOBLcA==");
string pkcs8pem = @"-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQChnrt21RMvGhec
0TNEEUGbC6QQkYL7Lr1waCk1u0SVCPebgB+3/ty72phtM2C5NKcIO3u6i9k1vbW7
W+lnAofJWAUQY7hIDxE2eOEm3YPvPxEMxZfexqh3LuOj1MqWs8AEtkajajy9p1bw
OXL+/4h3RgOF4KRUKgIR5SNDyShdmFPCFiQY+76+R2KpflxRqJVO7W7O3n3Vo7lX
D+FXgMiEUqc5OdheeleLBHC0/JigZNrrjJZ+La3Ru/32rPQGAONCMPRyK8J7wtFc
YaHIHVTVoeMMMYSe6VNgnISoLM0bAGnMQdSOog5cSUWO3nkAUakIcC7K6heg/eBC
+hKPpEKxAgMBAAECggEAahiXm6S4mT0Zrxot+0sQtEVqCG5de6LtPTNDikBK/0MJ
uIzdRZ4LLU6MrXMC1dHYrLDPwmA30O2etUXa7IJevTAI8v9jY/pwJEAqHadhCtdt
y+KSle33fXXMfioca93H+c/mgzQkd6O4kK5F7Vu2LAZMHcCgX5fMEA9JnSAaXYWo
NDuouqrAb1ev7vxJMt03xQ5QKwpXep1Mzo1ct5eWIjRcgVCBPpcyJEYS+ElVpRMn
/erbfHNrzuTyOmoayHkCu2cbotQ43bqsR50EvaiZ7sc1X4g5HXjc9dWsEzKfqqfA
Bqz5m35Z8JsEI/STrygvubMuY/ojNjgoET0EUSjTgQKBgQD0YyCLZeb06qNSaKEy
3Sg+c9wzHQNH7iZl7M9UQPZ/eBqs4pxa85XLU38yfkD0vvzmM+NYT66LuLkNPoAw
mJbGR4R1iNeZmGkb0jemFrXJovMFeOX4OuL90JdnFCr5ntrGcHHAiEM0cB54IBq7
qEt/OwaC/lgC9J6DopTsB/Xp2QKBgQCpTMaO9nF9X/ao8x02H2hRy9VshycimGdM
/UxrsEAPpqdOdKu7YQMtHrrKJG12sL0Tnh3jFZ5M0exJRxpAGQCzKnsKl7CDLi+a
jwYTepS73UmTf/Vk3qPEvIyhqTLOFhOarixCxM8LV1pReqlGMZjM//x0wzOUpDZW
dyn7YFeAmQKBgQCKfMnqdJqGW5ilkGkYu76cdWdpB53eWxQjWii7I/0LivIC2n+k
Arj1+aDw6h7BEqGZifnhB3Zv8wPaf3qBD1cRkWF8gUk73uRhQaULV384fkCc7z/S
hPwwvM2vOfyIa/6pyPqNEiqTQp3hkL/Va68ssDQmcx9IvXo+OhmOD4zJMQKBgFGr
jtGigycHJxdjiED2r71dxkw/epqOyK50NuxwLsceDvGjCMEw0HZwr40aO5AZPGz9
Rs+oOyA12HWVDk3DgfnsUUTP3j+6BQ7bVgQJizyBSKAWB0wstvYOOw01cSPHtJdW
1FU1WefPsOtDb+tDu8GQ77ln/TcEbI4TmDYCyNNpAoGAMultc3and65tAYmq/8rp
//0sG7H9FYZedn4LWgK0atSP4lrw3r5x3oYzP0ajTQYJ0JRlcHLHqsBlBrDuRZwj
rjqaJqmVfhi1tfV3abBueabP0QfhpGHN1vL1UOg9cGB/h25+A2hLfE/g1Lgfmg+D
-----END PRIVATE KEY-----";
test_rsaKeyParameters(pkcs8pem, ciphertext);
test_assymetricKeyParameter(pkcs8pem, ciphertext);
test_iCipherParameters(pkcs8pem, ciphertext);
private static void test_rsaKeyParameters(string pkcs8pem, byte[] ciphertext)
PemReader pemReader = new PemReader(new StringReader(pkcs8pem));
RsaKeyParameters rsaKeyParameters = (RsaKeyParameters)pemReader.ReadObject();
OaepEncoding oaepEncoding = new OaepEncoding(new RsaEngine(), new Sha256Digest(), new Sha1Digest(), null);
oaepEncoding.Init(false, rsaKeyParameters);
byte[] decrypted = oaepEncoding.ProcessBlock(ciphertext, 0, ciphertext.Length);
Console.WriteLine(Encoding.UTF8.GetString(decrypted));
private static void test_assymetricKeyParameter(string pkcs8pem, byte[] ciphertext)
PemReader pemReader = new PemReader(new StringReader(pkcs8pem));
AsymmetricKeyParameter asymmetricKeyParameter = (AsymmetricKeyParameter)pemReader.ReadObject();
OaepEncoding oaepEncoding = new OaepEncoding(new RsaEngine(), new Sha256Digest(), new Sha1Digest(), null);
oaepEncoding.Init(false, asymmetricKeyParameter);
byte[] decrypted = oaepEncoding.ProcessBlock(ciphertext, 0, ciphertext.Length);
Console.WriteLine(Encoding.UTF8.GetString(decrypted));
private static void test_iCipherParameters(string pkcs8pem, byte[] ciphertext)
PemReader pemReader = new PemReader(new StringReader(pkcs8pem));
ICipherParameters iCipherParameters = (ICipherParameters)pemReader.ReadObject();
OaepEncoding oaepEncoding = new OaepEncoding(new RsaEngine(), new Sha256Digest(), new Sha1Digest(), null);
oaepEncoding.Init(false, iCipherParameters);
byte[] decrypted = oaepEncoding.ProcessBlock(ciphertext, 0, ciphertext.Length);
Console.WriteLine(Encoding.UTF8.GetString(decrypted));