Domanda

Quando si chiama la seguente funzione:

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

Ora sto ottenendo l'errore: bad lunghezza.

Con una stringa più piccola funziona, tutte le idee che cosa il problema potrebbe essere la stringa sto passando è meno di 200 caratteri.

È stato utile?

Soluzione

RSA crittografia è significa solo per piccole quantità di dati, la quantità di dati è possibile crittografare dipende dalla dimensione della chiave che si sta utilizzando, ad esempio per 1024 bit RSA chiavi, e PKCS # 1 V1.5 imbottitura, è possibile crittografare 117 byte al massimo, con una chiave RSA 2048, è possibile crittografare 245 byte.

C'è una buona ragione per questo, la crittografia asimmetrica è computazionalmente costoso. Se si desidera crittografare grandi quantità di dati si dovrebbe utilizzare la crittografia simmetrica. Ma cosa succede se si vuole non ripudio? Ebbene quello che poi fare è utilizzare entrambi. Si crea una chiave simmetrica e scambiare utilizzando la crittografia asimmetrica, che poi in modo sicuro scambiati chiave simmetrica per crittografare i grandi quantità di dati. Questo è ciò che SSL e l'uso WS-Secure sotto le coperte.

Altri suggerimenti

Per le future ricerche in materia di RSA eccezioni male lunghezza ...

È possibile calcolare il numero massimo di byte che possono essere crittografati con una particolare dimensione della chiave con il seguente:

((KeySize - 384) / 8) + 37

Tuttavia, se l'ottimale asimmetrica crittografia imbottitura (OAEP) parametro è vero, come è nel post originale, il seguente può essere utilizzato per calcolare il byte max:

((KeySize - 384) / 8) + 7

Le dimensioni delle chiavi legali 384 thru 16384 con una dimensione di salto 8.

Come spiegato in precedenza, la soluzione per le eccezioni 'lunghezza cattivo' tipo è quello di ibridare l'uso della crittografia simmetrica e asimmetrica, in modo che la dimensione del testo che si sta cifrando non è vincolato dalla dimensione della chiave. Che, fondamentalmente, utilizza la crittografia RSA per crittografare in modo asimmetrico il chiave casuale .

  

Per la crittografia:

     
      
  1. Generare una chiave casuale della lunghezza richiesta per tecnica di cifratura simmetrica come AES o Rijndael.

  2.   
  3. Simmetricamente crittografare il testo / dati utilizzando AES / Rijndael con il tasto casuale generato nel passaggio 1.

  4.   
  5. Utilizzando RSA, asimmetricamente cifrare la chiave casuale generato nel passaggio 1.

  6.   
     

Per decrittazione:

     
      
  1. Per prima decifrare la chiave casuale AES / Rijndael generati utilizzando la chiave privata RSA.

  2.   
  3. Poi decifrare il testo originale / dati utilizzando la chiave casuale RSA-decifrati

  4.   

Per una dimostrazione, si potrebbe desiderare di avere uno sguardo questa seguente esempio in C #:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top