RSACryptoServiceProvider initialize with own public key and private key(RSACryptoServiceProvider 用自己的公钥和私钥初始化)
问题描述
我正在尝试使用我自己的公钥和私钥初始化 RSACryptoServiceProvider.
I'm trying to initialize RSACryptoServiceProvider with my own public and private keys.
据我所知,这样做的方法是使用
As far as I could research, the way to do this is to call the constructor with
RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(cspParams);
cspParams 如上所示.但是,当我查看有关使用它的 msdn 示例时:http://msdn.microsoft.com/en-us/library/ca5htw4f.aspx
cspParams as shown above. However, when I look at the msdn example on the use of it: http://msdn.microsoft.com/en-us/library/ca5htw4f.aspx
我没有看到他们设置私钥或公钥的任何地方.仅使用 KeyContainer.当我创建一个没有 cspParam 的 RSACryptoServiceProvider 时,它默认设置为仅使用公钥.当我检查类本身的 PublicOnly 变量时,我注意到了这一点,它是一个只读变量.
I don't see any place where they set the private or public keys. Only using a KeyContainer. When I create an RSACryptoServiceProvider without a cspParam, then it is by default set to only use a Public key. I notice this when I check the PublicOnly variable on the class itself and it is a read only variable.
我的问题是如何初始化这个类,然后设置我自己的私钥和公钥.服务器将使用私钥,客户端将拥有公钥.
我发现创建一个 RSAParameter 对象并将其上的 .Exponent 和 .Modulus 参数分别设置为公共和私有变量.
What I found out is that creating an RSAParameter object and setting the .Exponent and .Modulus parameters on it as the public and private variables respectively.
但我收到 "Missing Private Key" 错误,因为我认为 RSACryptoServiceProvider 未使用正确的构造函数进行初始化.
But I'm getting a "Missing Private Key" error since I believe the RSACryptoServiceProvider isn't initialized with the correct constructor.
以下是我的一些代码.不用担心 BigInteger 类,这只是一个实验.不管我是否使用它,我都会得到同样的错误.
Below is some of my code. Don't worry about BigInteger class, it's just an experiment. Even if I use it or not, I get the same error.
//Create a UnicodeEncoder to convert between byte array and string.
UnicodeEncoding ByteConverter = new UnicodeEncoding();
byte[] dataToEncrypt = ByteConverter.GetBytes(password);
byte[] encryptedData;
byte[] decryptedData;
//RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSAParameters rsap = new RSAParameters();
BigInteger n = new BigInteger("19579160939939334264971282204525611731944172893619019759209712156289528980860378672033164235760825723282900348193871051950190013953658941960463089031452404364269503721476236241284015792700835264262839734314564696723261501877759107784604657504350348081273959965406686529089170062268136253938904906635532824296510859016002105655690559115059267476786307037941751235763572931501055146976797606538425089134251611194500570922973015579287289778637105402129208324300035518642730384616767241853993887666288072512402523498267733725021939287517009966986976768028023180137546958580922532786773172365428677544232641888174470601681", 10);
BigInteger e = new BigInteger("65537", 10);
//rsap.Modulus = ByteConverter.GetBytes(publicKey);
rsap.Exponent = e.getBytes();
rsap.Modulus = n.getBytes();
/*rsap.Exponent = ByteConverter.GetBytes(publicKey);
rsap.D = ByteConverter.GetBytes(publicKey);
rsap.DP = ByteConverter.GetBytes(publicKey);
rsap.DQ = ByteConverter.GetBytes(publicKey);
rsap.P = ByteConverter.GetBytes(publicKey);
rsap.Q = ByteConverter.GetBytes(publicKey);
rsap.InverseQ = ByteConverter.GetBytes(publicKey);*/
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
{
//RSA.PublicOnly = false;
RSA.ImportParameters(rsap);
Debug.Log ("PublicOnly: " + RSA.PublicOnly);
Debug.Log (rsap.Modulus.Length);
//Debug.Log (RSA.ToString());
//Pass the data to ENCRYPT, the public key information
//(using RSACryptoServiceProvider.ExportParameters(false),
//and a boolean flag specifying no OAEP padding.
//encryptedData = RSACSPSample.RSAEncrypt(dataToEncrypt, rsap, false);
encryptedData = RSACSPSample.RSAEncrypt(dataToEncrypt, RSA.ExportParameters(false), false);
Debug.Log ("encryptedData: " + encryptedData);
//Display the decrypted plaintext to the console.
//Debug.Log("Decrypted plaintext: " + ByteConverter.GetString(""));
//Pass the data to DECRYPT, the private key information
//(using RSACryptoServiceProvider.ExportParameters(true),
//and a boolean flag specifying no OAEP padding.
decryptedData = RSACSPSample.RSADecrypt(encryptedData, RSA.ExportParameters(true), false);
}
//encryptedData = RSACSPSample.RSAEncrypt(dataToEncrypt, rsap, false);
//if (encryptedData != null) {
password = ByteConverter.GetString(decryptedData);
/
本文标题为:RSACryptoServiceProvider 用自己的公钥和私钥初始化


- 如何用自己压缩一个 IEnumerable 2022-01-01
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- 输入按键事件处理程序 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01