Chiffrement à clé publique avec RSACryptoServiceProvider

J'ai été sur un article sur CodeProject un pendant un certain temps, qui explique comment le chiffrer et déchiffrer à l'aide du RSA fournisseur de:

Chiffrement à Clé Privée RSA

Alors que l'ancienne version de 2009 a été buggy, la nouvelle version 2012 (avec le Système.Numerics.BigInteger de soutien) semble plus fiable. Ce que cette version manque est bien un moyen de chiffrer avec un public clé et décrypter à l'aide de la privé clé.

Donc, j'ai essayé moi-même, mais à obtenir des ordures quand j'déchiffrer. Je ne suis pas familier avec le RSA fournisseur, donc je suis dans le noir ici. Il est difficile de trouver plus d'informations sur la façon dont cela est censé fonctionner.

Personne ne voir ce qui est mal à cela?
Ce qui suit est le Chiffrement avec une clé PUBLIQUE:

//Add 4 byte padding to the data, and convert to BigInteger struct
BigInteger numData = GetBig( AddPadding( data ) );
RSAParameters rsaParams = rsa.ExportParameters( false );
//BigInteger D = GetBig( rsaParams.D ); //only for private key
BigInteger Exponent = GetBig( rsaParams.Exponent );
BigInteger Modulus = GetBig( rsaParams.Modulus );
BigInteger encData = BigInteger.ModPow( numData, Exponent, Modulus );    
return encData.ToByteArray();

Puis-je utiliser un grand "D" de la part du fournisseur quand je fais cela? Probablement pas, puisque c'est la clé publique qui n'ont pas de "D".

Alors la contrepartie (Décryptage à l'aide de la clé PRIVÉE):

BigInteger numEncData = new BigInteger( cipherData );
RSAParameters rsaParams = rsa.ExportParameters( true );
BigInteger D = GetBig( rsaParams.D );
//BigInteger Exponent = GetBig( rsaParams.Exponent );
BigInteger Modulus = GetBig( rsaParams.Modulus );
BigInteger decData = BigInteger.ModPow( numEncData, D, Modulus );
byte[] data = decData.ToByteArray();
byte[] result = new byte[ data.Length - 1 ];
Array.Copy( data, result, result.Length );
result = RemovePadding( result );
Array.Reverse( result );
return result;

Dois-je besoin d'un "D" ou l'Exposant ici?

Évidemment j'ai besoin de la crypto à travailler dans les deux sens privé-public, public-privé.
Toute aide est grandement appréciée!

OriginalL'auteur John | 2013-03-29