C # RSA-шифрование с использованием модуля и общего показателя - PullRequest
1 голос
/ 04 июня 2009

Мне нужно реализовать цифровой конверт с использованием AES и RSA, но у меня проблемы с реализацией алгоритма RSA в .NET.

Мне удалось зашифровать данные (AES) случайным симметричным ключом, но теперь я должен зашифровать ключ с помощью RSA.

Ключ представляет собой массив байтов (byte[]), и открытый у меня открытый ключ сообщает мне только модуль и открытый показатель, оба массива байтов (byte[]).

Используя только эти два параметра, как я могу зашифровать сгенерированный мной ключ AES с помощью RSA?

Следующий код извлекает сообщение из файла и шифрует его с помощью AES. После этого открытый ключ считывается из файла открытого ключа, а модуль и показатель степени находятся в соответствующих им байтовых массивах. Как бы я продолжил шифровать symmetricKey с помощью 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. В ответ на ответ упомяну rsa.ImportParameters: Я пытался с rsa.ImportParameters(keyInfo), но он выбрасывает CryptographicException ("Bad Data"). Как насчет размеров массива? В настоящее время модуль составляет 128 байтов, а показатель степени - 64 байта.

1 Ответ

5 голосов
/ 04 июня 2009

Использование 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;       
}

Итак, вам нужны RSAParameters , но все, что вам нужно установить, это модуль и экспонент для шифрования.

...