2014-10-15 3 views
0

У меня есть немного трудного понимания класса RSACryptoServiceProvider ... Я должен зашифровать сообщение длиной длиной 256 бит с ключом , который также имеет длину 256 бит. Должен ли вывод также иметь длину 256 бит? Вот мой код:RSA-алгоритм с использованием RSACryptoServiceProvider

//key generation 

byte[] bytes = new byte[32]; 
var rng = new RNGCryptoServiceProvider(); 
rng.GetBytes(bytes); 
k2 = bytes; 

//encryption function 

static public byte[] Encryption(byte[] Data, RSAParameters RSAKey, bool DoOAEPPadding) 
{ 
    byte[] encryptedData; 
    using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider()) 
    { 
     RSA.ImportParameters(RSAKey); 
     encryptedData = RSA.Encrypt(Data, DoOAEPPadding); 
    } 
    return encryptedData; 
} 

И, наконец, расчет

ciphertext = Encryption(k2, RSA.ExportParameters(false), false); 

производит byte[128] шифротекста аки 1024 бита. Должен ли я получить зашифрованный текст размером byte[32]?

+0

Возможно, вы должны указать свои переменные после ваших функций ... –

ответ

1

Кажется, что вы используете ключ, k2, как данные для шифрования RSA. Это нормально, если вы хотите, например. для обертывания 256-битного ключа AES с использованием RSA. Но ваш ключ RSA является вторым параметром, а не первым.

Данные в k2 затем дополняются (в соответствии со старой PKCS # 1 v1.5 схемы), после чего модульное возведение будет выполнено с использованием открытого показателя степени и модулем ключа RSA. Модуль ключа RSA определяет размер ключа. Это возвышение по модулю всегда приведет к результату между нулем и модулем - 1. Однако результат всегда остается слева от размера ключа в байтах (с функцией I2OSP).

Похоже, что ваш результат равен 1024 бит, а это значит, что пара ключей RSA также равна 1024 бит.

+0

Отредактировал мой ответ, чтобы соответствовать изменениям в вопросе. Дайте крик, если что-то неясно. –

+0

Вы имеете в виду любой способ вычисления RSA k2 с ключом k1, то есть: E_k1 (k2), используя RSACryptoServiceProvider? – Cobe

+0

Что такое k1? Если это RSAK, вы уже это делаете. Открытый ключ RSA состоит из публичного показателя и модуля. Он не должен быть размером всего 32 байта и всегда будет генерировать зашифрованный текст размера модуля, по крайней мере на 11 байтов больше, чем открытый текст (если применяется дополнение). –

Смежные вопросы