如何在RSAParameters上设置公钥和私钥以用于RSACryptoServiceProvider?

我在线阅读了一些教程,并生成了公钥和私钥,但是如何将它们设置为在C#中使用? 这是我有的:

string publicKey = "..."; string privateKey = "...."; UnicodeEncoding ByteConverter = new UnicodeEncoding(); byte[] dataToEncrypt = ByteConverter.GetBytes("Data to Encrypt"); byte[] encryptedData; byte[] decryptedData; string decrptedStr = ""; using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider()) { RSAParameters myRSAParameters = RSA.ExportParameters(true); myRSAParameters.Modulus = ByteConverter.GetBytes(publicKey); myRSAParameters.Exponent = ByteConverter.GetBytes(privateKey); encryptedData = RSAEncrypt(dataToEncrypt, myRSAParameters, false); decryptedData = RSADecrypt(encryptedData, myRSAParameters, false); decrptedStr = ByteConverter.GetString(decryptedData); } 

这是我从M $网站复制海峡的加密/解密function:

  static public byte[] RSAEncrypt(byte[] DataToEncrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding) { try { byte[] encryptedData; using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider()) { RSA.ImportParameters(RSAKeyInfo); encryptedData = RSA.Encrypt(DataToEncrypt, DoOAEPPadding); } return encryptedData; } catch (CryptographicException e) { Console.WriteLine(e.Message); return null; } } static public byte[] RSADecrypt(byte[] DataToDecrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding) { try { byte[] decryptedData; using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider()) { RSA.ImportParameters(RSAKeyInfo); decryptedData = RSA.Decrypt(DataToDecrypt, DoOAEPPadding); } return decryptedData; } catch (CryptographicException e) { Console.WriteLine(e.ToString()); return null; } } 

这里有很多问题。 您没有指明公钥/私钥的编码,但我可以确定无论编码如何,只需通过ByteConverter.GetBytes(...)获取Unicode编码字符串的等效字节就行不通。 这些应该是数字RSA参数的等效字节数组。

第二个问题是你对“公共”和“私人”键的解释。 公钥不是(仅)模数,私钥不是指数。 公钥由模数 (公共)指数( RSAParameters类型的Exponent属性,私钥是模数和私有指数( RSAParameters类型的D属性))组成。但是,为了成为用于解密,导入RSACryptoServiceProviderRSAParameters也必须设置DPDQInverseQ属性(虽然我没有对此进行测试,但也可能需要PQ )。

同样,在不知道公钥/私钥中使用的编码的情况下,我无法提供有关如何提取适当值以填充RSAParameters的必要属性的任何进一步细节。