2009-06-04 7 views
1

Ich muss eine digitale Hülle mit AES und RSA implementieren, aber ich habe Probleme mit der .NET-Implementierung des RSA-Algorithmus.C# RSA-Verschlüsselung mit Modul und öffentlichen Exponenten

Ich habe es geschafft, die Daten (AES) mit dem zufälligen symmetrischen Schlüssel zu verschlüsseln, aber jetzt muss ich den Schlüssel mit RSA verschlüsseln.

Der Schlüssel ist ein Array von Bytes (byte[]) und der öffentliche Schlüssel Ich habe nur den Modulo und den öffentlichen Exponenten, beide Arrays von Bytes (byte[]).

Mit nur diesen beiden Parametern, wie kann ich meinen AES generierten Schlüssel mit RSA verschlüsseln?

Der folgende Code ruft die Nachricht aus der Datei ab und verschlüsselt sie mit AES. Anschließend wird der öffentliche Schlüssel aus der Datei mit dem öffentlichen Schlüssel gelesen, und der Modulus und der Exponent befinden sich in ihren entsprechenden Byte-Arrays. Wie würde ich weiterhin die symmetricKey mit RSA verschlüsseln?

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. Als Antwort auf die Antwort unter der Nummer rsa.ImportParameters: habe ich mit der rsa.ImportParameters(keyInfo) versucht, aber es wirft eine CryptographicException ("Bad Data"). Was ist mit Array-Größen? Momentan ist der Modul 128 Byte und der Exponent 64 Byte.

+0

Wenn Sie rsa.ExportParameters (false) verwenden; dann erhalten Sie einen 3-Byte-Exponenten und ein 128-Byte-Modul – ShuggyCoUk

Antwort

5

Mit 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;  
} 

Also, was Sie brauchen die RSAParameters sind aber alles, was Sie brauchen, sind zum Einstellen des Modulus und der Exponent zu verschlüsseln.

Verwandte Themen