2009-08-29 8 views
2

Mon serveur crée un RSACryptoServiceProvider et exporte ses paramètres vers une variable (RSAKeyInfo). Ensuite, la clé publique est envoyée au client et le client crypte quelque chose avec cette clé publique.Comment décrypter les données RSA dans C# .NET de manière appropriée?

Maintenant, je dois être en mesure de déchiffrer ces mêmes données lors de leur renvoi au serveur - d'où la RSA est utile dans mon cas.

Cependant, j'obtiens une exception "Bad Data" lorsque j'essaie de recréer un RSACryptoServiceProvider avec des paramètres importés du premier RSACryptoServiceProvider créé précédemment.

... Le code pourrait être plus clair.

Création du Crypto:

class Cryptograph 
{ 
    public Cryptograph() 
    { 
     this.RSAKeyInfo = new RSACryptoServiceProvider(2048, new CspParameters(1)).ExportParameters(true); 
    } 
} 

Accès plus tard pour le décryptage:

byte[] encrypted = ...; 

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
rsa.ImportParameters(this.Cryptograph.RSAKeyInfo); 

byte[] decrypted = rsa.Decrypt(encrypted, false); 
Console.WriteLine(Utilities.ByteArrayToHexString(decrypted)); 

je reçois l'exception "Bad Data" sur cette ligne:

byte[] decrypted = rsa.Decrypt(encrypted, false); 

Que suis-je mal faire? Comment puis-je le faire correctement? Merci :)

P.S .: S'il vous plaît ne pas envoyer MSDN ou liens de résultats Google évident, j'ai lu toutes ces pages et ne peut toujours pas le faire fonctionner.

+0

Le client est-il également un client .net? Utilisent-ils la même version de .net? –

Répondre

3

Lorsque quelque chose est chiffré avec une clé publique, vous devez utiliser la clé privée pour le déchiffrement. Je ne vois pas où vous utilisez la clé privée pour le déchiffrement.

Je sais que vous avez déjà lu, mais vous pouvez lire la page Chiffrer et cette page Décrypter, et assurez-vous que vous suivez les étapes: http://msdn.microsoft.com/en-us/library/te15te69.aspx

À moins que vous cryptez des messages très courts, Comme un mot de passe, le cryptage RSA devrait généralement être utilisé pour crypter une clé symétrique, qui est plus rapide pour crypter/décrypter des messages plus longs.

La taille de ce que vous pouvez chiffrer avec une clé publique est liée à la longueur de la clé.

+0

Définitivement d'accord sur la longueur du message RSA est généralement beaucoup plus lent que le chiffrement/déchiffrement symétrique, donc souvent utilisé juste pour chiffrer le mot de passe ou – zebrabox

+0

clé symétrique Permettez-moi de réorganiser ma question. J'ai un tableau d'octets de 128 octets contenant des données cryptées avec la clé publique J'ai un tableau d'octets de 128 octets contenant la clé privée Comment décrypter. le tableau d'octets cryptés? Merci :) – Lazlo

+0

Comment la clé privée a été transformée en un tableau d'octets? Votre clé de 128 bits devrait être une clé symétrique. Alors, était crypté avec une clé privée? Si c'est le cas, vous devez le déchiffrer avec la clé publique, mais vous devrez ensuite recréer la clé symétrique à partir de la clé déchiffrée.Quelle API ou quelle langue a transformé les clés en une représentation en octets? –

Questions connexes