我试图加密给定我从API检索到的公钥的字符串。公钥是纯文本(基本编码64),类似于:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCH9 / o5IG0tu9VNYiJSltzV5ewK9TNoLeToSYkoH4lEytRM61AMeO6aBRZ3dsY1Czb + fgK6Q + M4ub / 9jbcXIGmVLvTypdn + VW1dotXzMP5sfDgCUuhScjH7gqsXQAvaF5LxjLUbL5I5zCGXbPVwBCEyVhN0oNp3TtNKoMcF6AjNhwIDAQAB
我现在想要使用此公钥加密字符串。我发现了一些从PEM格式中读取的relevant code,但很明显它不会在这里工作:
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
最终为空。 Bouncycastle的文档似乎很少,我不知道我应该使用什么来获得正确的AsymmetricKeyParameter
类型。
我想我可以从密钥写一个PEM文件,但感觉有点浪费。
所以更广泛的问题是:当我将公钥作为字符串时,如何使用PKSC1填充加密?
更准确的问题:我应该使用哪种AsymmetricKeyParameter
类型?
提前致谢。
修改
我使用原生RSACryptoServiceProvider
here找到了解决方法。不过,知道如何用BC做这件事会很好。