Skip to content

Instantly share code, notes, and snippets.

@KaiserWerk
Created May 9, 2022 17:44
Show Gist options
  • Save KaiserWerk/fffb619519c74f05e9486d1db27d9c42 to your computer and use it in GitHub Desktop.
Save KaiserWerk/fffb619519c74f05e9486d1db27d9c42 to your computer and use it in GitHub Desktop.
C#: De- and Encryption using RSA
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Encodings;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Security;
using System.Text;
namespace RSATest
{
public class RSATest
{
public static void Main(string[] args)
{
var privKey = @"-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQB6NRuk3x4bMal3RAT87NMRrKnpetWLNBfqu4yGxQEGVFKYQGjy
JGK2wKE62B9vGlgsA6GVOX7R9P9cRtF8CQBUzw3qm0QtIefD4xPo3GolJXj65ih7
CyWGGDW0HTcdlHowY0DPf4eTN9zDB7j3HybACIUrTYaFDudCpbQu6mpUbIAeHbVS
fN+NIyWKz9f1WVw62P2BE3N2+fgjNIXULn+T9+B3F4bOn3bK3L/mwdxN88e8TbFd
qd77qRlflVNxXjx2hFEjwY7GBNuERUPftrOrIcvDZ7Dmf2M6Tnc8wZbdtd9HJ91I
0QpXdpMCn/lPgh5t5fAgb6MwKUijkomf1p1PAgMBAAECggEAd+3EakFXr0JGV7fV
2UykOlUjDfEwvYJq8j4Jw3xz6/02bRnQo8jXYxeZYkEUYBkPbGpH2UTqUytGqw0I
qdu/insD4jdraYs7gj5HnJ8qP7gNiNPz6ARhV75MfayqGQpL+058HOW/a9dHe9IJ
T+MvSQdTgNJ87/lXNE2fjOcZYC0R9a8EggVY5kfuUsklAiKnvBS2NSDTWYKSgvjW
QlnLhtH00aDLpaYRN5JJK1cD88FmxGimCm4h10q++6nv9M1B0i5+98zmbYPgC57K
D4Zyc/m0x7AgMN6HtS1REZqrmwmNv8Olhs1fB3hf4uF239BzihBvy7GiPEhMDbXz
HKltuQKBgQDe5U2oLMtvKwukdxsEIPQSvq7tlhGC4kCOv3diAH5HJKIXpwHsZX3B
gzI28dhCvRPy8mTXY7Ttg3da5BVnBlm+l2XPe1em/yFuntHIgUpjqX4iP72fh5/k
QbgnBkj6wjw+J363lfooHQnzCu90PncTVZtCyJB3ZWkgWi5HU3EC9QKBgQCMW4u8
Hi7DMnJuJbQzCjlcGjl9NW7htG+9/73Z/VTIcZL7DR0RvtvfVJaqcwfw/RGDORGc
8MPub0u3E8VDhLTNKd2yZZREmTAnSvrkiLJudnrGwLljkOlvzo3PaTnzCWEppHk0
wC6f4SFUfXEa2iwB9zwIpDC+76SVb/tP7cvcswKBgQCD7Wjnb4wBgpLjh3PAH9kW
9zIGgdpfg5b+Zqk8olobtb0TDtB+oRur3AFur/p2lf8mvv2c1vER28xbScC5N/MK
cgXapoCc4UlidjJo4M2s63cywlN0BwxGR/e9cWTktu59Q1cnRmfIMlffOMu+G/LS
yMqa3qdTY/yzH21g3ix3uQKBgBmGNF0baAmbTO/271Qw0cmMA1RfuTBWbdOxhEb2
KMrizIXXFqg5eyab7WJF1PXgL6UbZbaSmi7sEmrSr5bdtTtyF5zvmAz5hqY+nm2c
5kXsSduHBK+0lJ7+gw9q5VzrIb4+6MPNBy2P9U22GjF153bcDRDNOwgd8GI0oREh
/2a9AoGBANSjWG2e6ixsRt2SoIous8OVjkg4GJeQ9PEjR6R0iSeGAzje/wsoSvaK
UNau+YrOxfRvNISxe0Gq1FGUPjIOki00UfamDie7+1RwI8xSkCURPLntw6lyApJY
sNenMj4n2nYVQbVgXfvPx3P5R9aE4v6drkIHlXFbAoe6lpS/tf4z
-----END RSA PRIVATE KEY-----";
var pubKey = @"-----BEGIN PUBLIC KEY-----
MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQB6NRuk3x4bMal3RAT87NMR
rKnpetWLNBfqu4yGxQEGVFKYQGjyJGK2wKE62B9vGlgsA6GVOX7R9P9cRtF8CQBU
zw3qm0QtIefD4xPo3GolJXj65ih7CyWGGDW0HTcdlHowY0DPf4eTN9zDB7j3HybA
CIUrTYaFDudCpbQu6mpUbIAeHbVSfN+NIyWKz9f1WVw62P2BE3N2+fgjNIXULn+T
9+B3F4bOn3bK3L/mwdxN88e8TbFdqd77qRlflVNxXjx2hFEjwY7GBNuERUPftrOr
IcvDZ7Dmf2M6Tnc8wZbdtd9HJ91I0QpXdpMCn/lPgh5t5fAgb6MwKUijkomf1p1P
AgMBAAE=
-----END PUBLIC KEY-----";
var input = "hallo Welt!";
Console.WriteLine("Step 1: " + input);
var encryptedWithPublic = RsaEncryptWithPublic(input, pubKey);
Console.WriteLine("Step 2: " + encryptedWithPublic);
var output1 = RsaDecryptWithPrivate(encryptedWithPublic, privKey);
Console.WriteLine("Step 3: " + output1);
}
public static string RsaEncryptWithPublic(string clearText, string publicKey)
{
var bytesToEncrypt = Encoding.UTF8.GetBytes(clearText);
var encryptEngine = new Pkcs1Encoding(new RsaEngine());
using (var txtreader = new StringReader(publicKey))
{
var keyParameter = (AsymmetricKeyParameter)new PemReader(txtreader).ReadObject();
encryptEngine.Init(true, keyParameter);
}
var encrypted = Convert.ToBase64String(encryptEngine.ProcessBlock(bytesToEncrypt, 0, bytesToEncrypt.Length));
return encrypted;
}
public static string RsaEncryptWithPrivate(string clearText, string privateKey)
{
var bytesToEncrypt = Encoding.UTF8.GetBytes(clearText);
var encryptEngine = new Pkcs1Encoding(new RsaEngine());
using (var txtreader = new StringReader(privateKey))
{
var keyPair = (AsymmetricCipherKeyPair)new PemReader(txtreader).ReadObject();
encryptEngine.Init(true, keyPair.Private);
}
var encrypted = Convert.ToBase64String(encryptEngine.ProcessBlock(bytesToEncrypt, 0, bytesToEncrypt.Length));
return encrypted;
}
// Decryption:
public static string RsaDecryptWithPrivate(string base64Input, string privateKey)
{
var bytesToDecrypt = Convert.FromBase64String(base64Input);
AsymmetricCipherKeyPair keyPair;
var decryptEngine = new Pkcs1Encoding(new RsaEngine());
using (var txtreader = new StringReader(privateKey))
{
keyPair = (AsymmetricCipherKeyPair)new PemReader(txtreader).ReadObject();
decryptEngine.Init(false, keyPair.Private);
}
var decrypted = Encoding.UTF8.GetString(decryptEngine.ProcessBlock(bytesToDecrypt, 0, bytesToDecrypt.Length));
return decrypted;
}
public static string RsaDecryptWithPublic(string base64Input, string publicKey)
{
var bytesToDecrypt = Convert.FromBase64String(base64Input);
var decryptEngine = new Pkcs1Encoding(new RsaEngine());
using (var txtreader = new StringReader(publicKey))
{
var keyParameter = (AsymmetricKeyParameter)new PemReader(txtreader).ReadObject();
decryptEngine.Init(false, keyParameter);
}
var decrypted = Encoding.UTF8.GetString(decryptEngine.ProcessBlock(bytesToDecrypt, 0, bytesToDecrypt.Length));
return decrypted;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment