2009-06-04 16 views
1

Je dois implémenter une enveloppe numérique en utilisant AES et RSA, mais j'ai des problèmes avec l'implémentation .NET de l'algorithme RSA.Cryptage C# RSA en utilisant le module et l'exposant public

J'ai réussi à crypter les données (AES) avec la clé symétrique aléatoire, mais maintenant je dois crypter la clé avec RSA.

La clé est un tableau d'octets (byte[]) et la clé publique I ne me dit que le module et l'exposant public, les deux tableaux d'octets (byte[]). En utilisant uniquement ces deux paramètres, comment puis-je chiffrer ma clé générée AES avec RSA?

Le code suivant extrait le message du fichier et le crypte avec AES. Ensuite, la clé publique est lue dans le fichier de clé publique et le module et l'exposant sont dans leurs tableaux d'octets appropriés. Comment continuer à crypter le symmetricKey avec RSA?

String msgString = Systematic.GetFileContents(messagePath); 
Byte[] initVector = new byte[] { 50, 60, 70, 80, 90, 40, 50, 60, 70, 80, 90, 40, 60, 80, 70, 90 }; 
Byte[] symetricKey = AesCrypt.GenerateRandomKey(); 
Byte[] encryptedMessage = AesCrypt.Encrypt(msgString, symetricKey, initVector, mode); 
Byte[] modulus = null; 
Byte[] publicExp = null; 
DataFormatHelper.ReadPublicKey(publicKeyPath, "RSA", ref modulus, ref publicExp); 

P.S. En réponse à la réponse mentionnant rsa.ImportParameters: J'ai essayé avec le rsa.ImportParameters(keyInfo) mais il lance un CryptographicException ("Bad Data"). Qu'en est-il des tailles de tableau? Actuellement, le module est 128 octets et l'exposant 64 octets.

+0

Si vous utilisez rsa.ExportParameters (false); alors vous obtenez un exposant de 3 octets et un modulable de 128 octets – ShuggyCoUk

Répondre

5

à l'aide RSACryptoServiceProvider

static public byte[] RSAEncrypt(byte[] data, 
    RSAParameters keyInfo, 
    bool doOAEPPadding) 
{ 
    byte[] encryptedData; 
    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) 
    { 
     //Import the RSA Key information. This only needs 
     //toinclude the public key information. 
     rsa.ImportParameters(keyInfo); 

     //Encrypt the passed byte array and specify OAEP padding. 
     //OAEP padding is only available on Microsoft Windows XP or later. 
     encryptedData = rsa.Encrypt(data, doOAEPPadding); 
    } 
    return encryptedData;  
} 

donc ce que vous avez besoin sont les RSAParameters mais tout ce que vous devez définir sont les Modulus et Exponent chiffrent à.

Questions connexes