si hanno due opzioni (e qui mi descrivono solo il processo di crittografia, ma decrittografia è simile):
Utilizzare un cifrario a flusso (come AES-CTR)
si inizializza la cifra con un 16 byte key e veramente random nonce 16 byte, scrivere il nonce, caricare il primo pezzo, crittografarlo, scrivere il risultato, caricare un secondo pezzo e così via. Si noti che è necessario inizializzare il codice una sola volta. La dimensione del pezzo può essere arbitraria; non ha nemmeno bisogno di essere lo stesso ogni volta.
Utilizzare un codice a blocchi con una modalità di concatenamento un passaggio, ad esempio AES128-CBC
inizializzazione della crittografia con la chiave 16 byte, generare un casuale 16 byte IV, prego scrivere la IV, prego scrivere la totale lunghezza del file, caricare il primo pezzo, crittografarlo insieme alla IV, scrivere il risultato, caricare un secondo pezzo, crittografare utilizzando gli ultimi 16 byte del blocco crittografato precedente come IV, scrivere il risultato e così via. La dimensione del pezzo deve essere un multiplo di 16 byte; di nuovo, non ha nemmeno bisogno di essere lo stesso ogni volta. Potrebbe essere necessario eseguire il pad dell'ultimo blocco con gli zeri.
In entrambi i casi
È necessario calcolare l'hash crittografico del file in chiaro originale (ad esempio utilizzando SHA-256) e scrivere quando la crittografia è finito. È piuttosto semplice: si inizializza l'hash all'inizio e si alimenta ogni blocco non appena viene caricato (incluso nonce/IV e probabilmente il campo lunghezza). Al lato della decifratura, fai lo stesso. Alla fine, è necessario verificare che il digest elaborato corrisponda a quello fornito con il file crittografato.
Come può essere fatto su iOS? Temo di non avere familiarità con la piattaforma, ma il CCCypt sembra adattarsi al conto.
MODIFICA: non hash/IV e lunghezza anche hash.
Perché non suddividere i dati prima della crittografia, quindi decrittografarli e rimetterli insieme? –
@PRNDLDevelopmentStudios Sì, suppongo che lo farò se devo, ma ho più file di grandi dimensioni, e sarebbe più difficile gestire un gruppo di file divisi. – Kyle
Si potrebbe provare a comprimere i dati prima della crittografia, ma non so se il rapporto di compressione sarebbe abbastanza alto da essere veramente importante. Forse aprire una connessione SSL a un server, caricare i dati crittografati, decrittografare i server e inviarli? –