您可以使用充气城堡,一个 .NET 库,允许您将 PKCS#1 格式的密钥转换为可用于加密和解密的实际密钥参数。
由于您拥有的公钥被格式化为 PKCS#1 base64 编码值。然后您可以使用 BouncyCastle 将公钥解码为 ASN.1 对象,如下所示
您必须从以下内容中删除“-----BEGIN PUBLIC KEY-----”和“-----END PUBLIC KEY-----”stringPublicKey
在您继续之前。
Asn1Object obj = Asn1Object.FromByteArray(Convert.FromBase64String(stringPublicKey));
然后,如指定RFC 3447 (A 1.1):
DerSequence publicKeySequence = (DerSequence)obj;
DerBitString encodedPublicKey = (DerBitString)publicKeySequence[1];
DerSequence publicKey = (DerSequence)Asn1Object.FromByteArray(encodedPublicKey.GetBytes());
DerInteger modulus = publicKey[0];
DerInteger exponent = publicKey[1];
在这里,您拥有创建公钥所需的一切:
RsaKeyParameters keyParameters = new RsaKeyParameters(false, modulus.PositiveValue, exponent.PositiveValue);
然后,BouncyCastle 提供了一种简单的方法将其转换为 .NET 兼容的RSAParameters
:
RSAParameters parameters = DotNetUtilities.ToRSAParameters(keyParameters);
然后您可以轻松地将关键参数导入到RSACryptoServiceProvider
:
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(parameters);
最后,进行加密:
byte[] dataToEncrypt = Encoding.UTF8.GetBytes(stringDataToEncrypt);
byte[] encryptedData = rsa.Encrypt(dataToEncrypt, true);
return Convert.ToBase64String(encryptedData);