Pergunta

Ao chamar a seguinte função:

byte[] bytes = rsa.Encrypt(System.Text.UTF8Encoding.UTF8.GetBytes(stringToEncrypt), true);

Agora estou recebendo o erro: mau comprimento.

Com uma corda menor que funciona, quaisquer idéias qual o problema pode ser a string que estou passando é menos de 200 caracteres.

Foi útil?

Solução

A criptografia RSA é apenas média para pequenas quantidades de dados, a quantidade de dados que você pode criptografar depende do tamanho da chave que você está usando, por exemplo, para as teclas RSA de 1024 bits e o PKCS # 1 V1.5 Padding, você pode criptografar 117 Bytes no máximo, com uma chave RSA de 2048, você pode criptografar 245 bytes.

Há uma boa razão para isso, a criptografia assimétrica é computacionalmente cara. Se você deseja criptografar grandes quantidades de dados, você deve usar a criptografia simétrica. Mas e se você quiser não repudiação? Bem, o que você faz é usar os dois. Você cria uma chave simétrica e a troca usando a criptografia assimétrica e, em seguida, trocou com segurança a chave simétrica para criptografar suas grandes quantidades de dados. É isso que o SSL e o WS-Secure usam embaixo das tampas.

Outras dicas

Para pesquisas futuras sobre as exceções do RSA de mau comprimento ...

Você pode calcular o número máximo de bytes que podem ser criptografados com um tamanho de chave específico com o seguinte:

((KeySize - 384) / 8) + 37

No entanto, se o parâmetro ideal de estofamento de criptografia assimétrica (OAEP) for verdadeiro, como está no post original, o seguinte pode ser usado para calcular os bytes máximos:

((KeySize - 384) / 8) + 7

Os tamanhos de chave legal são 384 a 16384, com um tamanho de salto de 8.

Conforme explicado acima, a solução para as exceções do tipo 'comprimento ruim' é hibridizar o uso da criptografia simétrica e assimétrica, de modo que o tamanho do texto que você está criptografando não é limitado pelo tamanho da chave. Você basicamente usa a criptografia RSA para criptografar por assimetricamente chave .

Para criptografia:

  1. Gere uma chave aleatória do comprimento necessário para a técnica de criptografia simétrica, como AES ou Rijndael.

  2. Criptografar simetricamente seu texto/dados usando AES/Rijndael usando a chave aleatória gerada na Etapa 1.

  3. Usando o RSA, criptografa assimetricamente a chave aleatória gerada na etapa 1.

Para descriptografia:

  1. Primeiro descriptografar a chave aleatória gerada por AES/Rijndael usando sua chave RSA privada.

  2. Em seguida

Para uma demonstração, você pode dar uma olhada neste exemplo a seguir em C#:

http://www.technical-recipes.com/2013/using-rsa-to-encrypt-large-data-files-in-c/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top