using System.Security.Cryptography;
private static string RSAKey = $"-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvWpIQFjQQCPpaIlJKpegirp5kLkzLB1AxHmnLk73D3TJbAGqr1QmlsWDBtMPMRpdzzUM7ZwX3kzhIuATV4Pe7RKp3nZlVmcrT0YCQXBrTwqZNh775z58GP2kZs+gVfNqBampJPzSB/hB62KkByhECn6grrRjiAVwJyZVEvs/2vrxaEpO+aE16emtX12RgI5JdzdOiNyZEQteU6zRBRJEocPWVxExaOpVVVJ5+UnW0LcalzA+lRGRTrQJ5JguAPiAOzRPTK/lYFFpCAl/F8wtoAVG1c8zO2NcQ0Pko+fmeidRFxJ/did2btV+9Mkze3mBphwFmvnxa35LF+Cs/XJHDwIDAQAB-----END PUBLIC KEY-----";
private static string dataToEncrypt = "4242424242424242";
public static void Main()
var defaultPaddingMode = GetModeFromPaddingAndDigest(null, null);
var pkcs1PaddingMode = GetModeFromPaddingAndDigest("PKCS1", "");
var oaepSHA1PaddingMode = GetModeFromPaddingAndDigest("OAEP", "SHA1");
var oaepSHA256PaddingMode = GetModeFromPaddingAndDigest("OAEP", "SHA256");
var oaepSHA384PaddingMode = GetModeFromPaddingAndDigest("OAEP", "SHA384");
var oaepSHA512PaddingMode = GetModeFromPaddingAndDigest("OAEP", "SHA512");
Console.WriteLine("Default Encryption:");
Console.WriteLine(RSAEncrypt(dataToEncrypt, defaultPaddingMode));
Console.WriteLine("Encryption - PKCS1:");
Console.WriteLine(RSAEncrypt(dataToEncrypt, pkcs1PaddingMode));
Console.WriteLine("Encryption - OAEP SHA1:");
Console.WriteLine(RSAEncrypt(dataToEncrypt, oaepSHA1PaddingMode));
Console.WriteLine("Encryption - OAEP SHA256:");
Console.WriteLine(RSAEncrypt(dataToEncrypt, oaepSHA256PaddingMode));
Console.WriteLine("Encryption - OAEP SHA384:");
Console.WriteLine(RSAEncrypt(dataToEncrypt, oaepSHA384PaddingMode));
Console.WriteLine("Encryption - OAEP SHA512:");
Console.WriteLine(RSAEncrypt(dataToEncrypt, oaepSHA512PaddingMode));
private static string RSAEncrypt(string data, RSAEncryptionPadding paddingMode){
using var cryptoProvider = RSA.Create();
cryptoProvider.ImportFromPem(RSAKey.Replace("\\r\\n", "\r\n"));
return Convert.ToBase64String(cryptoProvider.Encrypt(Encoding.UTF8.GetBytes(dataToEncrypt), paddingMode));
private static RSAEncryptionPadding GetModeFromPaddingAndDigest(string paddingMode, string digest) => paddingMode switch
null => RSAEncryptionPadding.Pkcs1,
"PKCS1" => RSAEncryptionPadding.Pkcs1,
null => RSAEncryptionPadding.OaepSHA1,
"SHA1" => RSAEncryptionPadding.OaepSHA1,
"SHA256" => RSAEncryptionPadding.OaepSHA256,
"SHA384" => RSAEncryptionPadding.OaepSHA384,
"SHA512" => RSAEncryptionPadding.OaepSHA512,
_ => throw new Exception("Invalid Digest Mode")
_ => throw new Exception("Invalid Padding Mode")