Domanda

Ho un messaggio contenuto in un byte [], crittografato con " RSA / ECB / PKCS1Padding " ;. Per decrittografarlo, creo un Cifra ce lo avvio con

c = Cipher.getInstance("RSA/ECB/PKCS1Padding");

Fino ad ora ho solo decodificato piccoli messaggi, usando il metodo doFinal () , restituendo un byte [] con i byte decifrati.

c.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptetBytes = c.doFinal(encryptedBytes);

Ma in questo caso i dati sono più grandi (circa 500 byte) e il metodo doFinal () genera un'eccezione (javax.crypto.IllegalBlockSizeException: i dati non devono superare i 128 byte) . Immagino di dover usare il metodo update () , ma non riesco a capire come farlo funzionare correttamente. Come viene fatto?

È stato utile?

Soluzione

Penso che usare la crittografia RSA per qualsiasi cosa tranne il trasporto delle chiavi sia un abuso.

Genera una nuova chiave per un codice simmetrico e crittografa i tuoi dati in blocco con quello. Quindi crittografare la chiave con RSA. Invia al destinatario il testo cifrato crittografato simmetricamente insieme alla chiave crittografata del contenuto crittografato asimmetricamente.

Altri suggerimenti

Con RSA puoi solo crittografare / decrittografare blocchi con dimensioni fino alla lunghezza della chiave meno la lunghezza dell'imbottitura. Se hai dati più lunghi della tua chiave, forse sono solo uniti in un array, quindi dovresti dividerli in blocchi con dimensioni della tua chiave (128 byte suggeriscono una chiave 1024 senza riempimento, non sono sicuro che sia possibile). L'uso di update () non è il caso qui.

Semplicemente, devi sapere come è stato creato questo array.

In generale, RSA non dovrebbe essere usato per crittografare grandi quantità di dati poiché richiede molto tempo. Dovrebbe essere usato per crittografare la chiave in un codice simmetrico, come AES.

Dai un'occhiata qui: https://www.owasp.org/index.php/Digital_Signature_Implementation_in_Java

Come ha detto Erickson,

I passaggi che dovresti seguire sono:

  1. Genera coppia di chiavi RSA (o recupera chiave pubblica da un archivio chiavi)
  2. Genera chiave simmetrica (AES)
  3. Crittografa dati con chiave AES
  4. Crittografa chiave AES con chiave pubblica RSA
  5. Archivia (o invia a persona con chiave privata) la chiave AES crittografata e i dati crittografati AES

Per decrittografare:

  1. Ottieni la chiave privata associata alla coppia di chiavi utilizzata per crittografare
  2. Decodifica della chiave AES con chiave privata
  3. Decodifica i dati con chiave AES
  4. Usa dati
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top