using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Asn1.Pkcs;
using Org.BouncyCastle.X509;
using Org.BouncyCastle.Pkcs;
public static void Main()
var dataToSign="challengeString";
RsaKeyPairGenerator g = new RsaKeyPairGenerator();
g.Init(new KeyGenerationParameters(new SecureRandom(), 2048));
AsymmetricCipherKeyPair pair = g.GenerateKeyPair();
PrivateKeyInfo privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(pair.Private);
byte[] serializedPrivateBytes = privateKeyInfo.ToAsn1Object().GetDerEncoded();
string serializedPrivate = Convert.ToBase64String(serializedPrivateBytes);
SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pair.Public);
byte[] serializedPublicBytes = publicKeyInfo.ToAsn1Object().GetDerEncoded();
string serializedPublic = Convert.ToBase64String(serializedPublicBytes);
Console.WriteLine("Private {0} {1}", serializedPrivate.Length, serializedPrivate);
Console.WriteLine("Public {0} {1}", serializedPublic.Length, serializedPublic);
var signer = SignerUtilities.GetSigner("RSA");
signer.Init(true, pair.Private);
byte[] dts = Encoding.UTF8.GetBytes(dataToSign);
signer.BlockUpdate(dts, 0, dataToSign.Length);
var signature = signer.GenerateSignature();
var signed = Convert.ToBase64String(signature);
Console.WriteLine("Semnat {0}", signed);