0

I'm trying to encrypt a string given a public key that I've retrieved from an API. The public key is plain text (base 64 encoded), something like:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCH9/o5IG0tu9VNYiJSltzV5ewK9TNoLeToSYkoH4lEytRM61AMeO6aBRZ3dsY1Czb+fgK6Q+M4ub/9jbcXIGmVLvTypdn+VW1dotXzMP5sfDgCUuhScjH7gqsXQAvaF5LxjLUbL5I5zCGXbPVwBCEyVhN0oNp3TtNKoMcF6AjNhwIDAQAB

I now want to encrypt a string using this public key. I've found some relevant code that reads from a PEM format, but obviously it won't work here:

byte[] dataToEncrypt = Encoding.UTF8.GetBytes(aString);
var encryptEngine = new Pkcs1Encoding(new RsaEngine());
using (var txtreader = new StringReader(key))
{
    var keyParameter = (AsymmetricKeyParameter)new PemReader(txtreader).ReadObject();
    encryptEngine.Init(true, keyParameter);
}

var encrypted = Convert.ToBase64String(encryptEngine.ProcessBlock(dataToEncrypt, 0, dataToEncrypt.Length));

keyParameter ends up being null. The documentation for Bouncycastle seems to be pretty scant, I don't really have an idea of what I should be using to get the right AsymmetricKeyParameter type.

I suppose I could write a PEM file from the key but feels a bit wasteful.

So the broader question is: How do I encrypt using PKSC1 padding when I have the public key as a string already?

The more precise question is: What AsymmetricKeyParameter type should I be using?

Thanks in advance.

EDIT I've found a workaround using the native RSACryptoServiceProvider here. Still, would be good to know how to do this with BC.

Community
  • 1
  • 1
Manish Patel
  • 4,411
  • 4
  • 25
  • 48

0 Answers0