RSACryptoServiceProvider initialiser avec sa propre clé publique et la clé privée

Je suis en train d'initialiser RSACryptoServiceProvider avec mes propres clés publique et privée.

Aussi loin que je pouvais la recherche, la façon de le faire est d'appeler le constructeur

RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(cspParams);

cspParams comme indiqué ci-dessus. Cependant, quand je regarde la msdn exemple sur l'utilisation de celui-ci:
http://msdn.microsoft.com/en-us/library/ca5htw4f.aspx

Je ne vois pas l'endroit où ils ont mis le privé ou le public touches. Uniquement à l'aide d'un KeyContainer. Lorsque je crée un RSACryptoServiceProvider sans cspParam, il est par défaut à utiliser uniquement une clé Publique. J'ai remarqué cela quand j'ai vérifier le PublicOnly variable sur la classe elle-même et il est en lecture seule variable.

Ma question est comment puis-je initialiser cette classe puis de définir mes propres clés privées et publiques.
Le serveur sera à l'aide de la clé privée et le client est la clé publique.

Que j'ai trouvé est que la création d'un RSAParameter objet et définition de l' .Exposant et .Le module paramètres, comme le public et le privé variables respectivement.

Mais je suis un Manquant"Clé Privée" erreur, puisque je crois que le RSACryptoServiceProvider n'est pas initialisé avec le bon constructeur.

Ci-dessous est une partie de mon code. Ne vous inquiétez pas à propos de BigInteger la classe, c'est juste une expérience. Même si je l'utilise ou pas, je reçois le même message d'erreur.

//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);
//}
La clé publique est définie par l'Exposant et le Module du RSA Params. La clé privée, est D dans le RSAParameters classe
Alors, comment puis-je configurer la clé publique de l'RSAParameter alors? J'ai déjà ma clé publique, dois juste régler le RSAParameter objet afin que je puisse l'utiliser.
Dépend si vous avez une publique et une clé privée à utiliser, si non, alors vous pouvez utiliser CSPParams pour créer une paire.
- Je faire, pouvez-vous me dire comment les utiliser?
laissez-nous continuer cette discussion dans le chat

OriginalL'auteur c1pherB1t | 2012-11-30