Как работает метод C # RSACryptoServiceProvider Encrypt ()? - PullRequest
3 голосов
/ 22 июня 2011

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

Используется ли гибридное шифрование AES + RSA? Или он просто использует RSA (неправильно) в качестве блочного шифра?

Ответы [ 2 ]

3 голосов
/ 22 июня 2011

все же метод Encrypt () может принять произвольное количество данных для шифрования

Согласно MSDN не может

Максимальная длина параметра rgb
Размер модуля -2 -2 * hLen, где hLen - размер хеша.

Он даже имеет CryptographicException, который гласит «Длина параметра rgb больше максимально допустимой длины.»

1 голос
/ 20 января 2012

Использует ли он гибридное шифрование AES + RSA?

Нет это не так. Если это то, что вы ищете, то вы должны сделать это сами или проверить мою старую запись blog на эту тему.

Или он просто использует RSA (неправильно) в качестве блочного шифра?

Нет это не так. Он применяет заполнение (либо PKCS # 1 1.5, либо OAEP) к предоставленному byte[] и шифрует его. Таким образом, имеет ограничения по длине (как уже отмечалось другими). ​​

Вот как это выглядит (из исходного кода Mono BCL).

public byte[] Encrypt (byte[] rgb, bool fOAEP) 
{
    // choose between OAEP or PKCS#1 v.1.5 padding
    AsymmetricKeyExchangeFormatter fmt = null;
    if (fOAEP)
        fmt = new RSAOAEPKeyExchangeFormatter (rsa);
    else
        fmt = new RSAPKCS1KeyExchangeFormatter (rsa);

    return fmt.CreateKeyExchange (rgb);
}
...