問題描述
我正在嘗試使用我自己的公鑰和私鑰初始化 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);
/
【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!