Mi piacerebbe trasmettere file crittografati da un server. So che ad esempio RSA supporta la decrittografia streaming. Non sono sicuro che sia Twofish o Rijndael lo supportino.
Suppongo che se non supportano, può essere implementato suddividendo i dati in blocchi con dimensioni note e crittografando il blocco effettivo anziché tutti i dati. Quindi il risultato sarà qualcosa del tipo:
[enc(chunk(data, 0)), enc(chunk(data, 1)), ... enc(chunk(data, index))]
invece di
[chunk(enc(data), 0)), chunk(enc(data), 1)), ... chunk(enc(data), index))]
Ho ragione, o questi algoritmi sono stati progettati pensando al supporto dello streaming?
Per chiarire cosa intendevo per "streaming decryption":
Lo streaming è descritto molto bene nel node.js manual , ma è un concetto generale e un ben noto Linux funzionalità, quindi non dovrebbe essere nuovo per qualsiasi programmatore. Si tratta approssimativamente di inviare un grosso file in piccoli blocchi, quindi è possibile iniziare a lavorare con esso (visualizzazione, trasformazione, ecc.) Prima che arrivi l'intero file e non sia necessario conservare l'intero file nella memoria, il che riduce la memoria consumo.
La decrittografia streaming utilizza un stream di trasformazione per decrittografare i dati. Quindi leggi una piccola parte del testo cifrato, decrittalo e scrivi il blocco di dati risultante in un altro stream. Ci possono essere diversi problemi qui, ad esempio il testo cifrato ha dimensioni diverse rispetto ai dati effettivi, quindi se si desidera cercare i dati è necessario convertire l'indice dei dati in indice del testo cifrato. Un altro problema che decifrare un chunk di dimensioni arbitrarie potrebbe non dare gli stessi dati che avresti decifrando l'intero testo cifrato e dividerlo in blocchi dopo.