Sto sviluppando un'applicazione che dovrebbe crittografare alcuni file piccoli (meno di 1 MB) e di grandi dimensioni (circa 500 MB).
Come posso crittografare i file e salvare la versione crittografata da qualche parte sul disco in modo efficace (ad es.
Posso far avanzare la crittografia se è necessario del tempo?Efficace crittografia dei file utilizzando AES in java
risposta
Supponendo di avere un tasto AES e un flusso di output, ecco come aggiungere un decoratore di crittografia allo stream.
Cipher enc = Cipher.getInstance("AES/CBC/PKCS5Padding");
enc.init(Cipher.ENCRYPT_MODE, key);
AlgorithmParameters params = enc.getParameters();
IvParameterSpec iv = params.getParameterSpec(IvParameterSpec.class);
out.write(iv.getIV());
out = new CipherOutputStream(enc, out);
Questo aggiunge l'IV all'inizio del testo cifrato; quando decifri, dovresti analizzarlo per inizializzare il codice.
Una soluzione migliore, a lungo termine, sarebbe quella di utilizzare la libreria che implementa la Sintassi dei messaggi crittografici, la base per S/MIME. Questo registra i metadati relativi agli algoritmi e alle chiavi che possono essere utilizzati per la decrittografia.
Vorrei anche raccomandare una modalità AEAD come GCM o CCM se il fornitore lo implementa. (Il SunJCE no.) Verranno verificati che il file è stato decrittografato correttamente e non è stato danneggiato.
@owlstead So che l'API è lì per GCM e mi aspettavo che SunJCE lo fornisse, ma quando sono andato a controllare, non sono riuscito a trovarlo [nella documentazione.] (Http://docs.oracle. it/javase/7/docs/technotes/guides/security/SunProviders.html) Sei a conoscenza di qualsiasi impegno da parte di Oracle di fornirlo tramite un fornitore JCE incluso? – erickson
Oops my scuse, probabilmente ho usato un percorso di build non standard. Dalla sorgente: "* Java SE ha già definito le interfacce AEAD/GCM in JDK 7. In JDK 8 i fornitori JCA/JCE implementeranno queste interfacce AEAD/GCM. È probabile che aggiungiamo alcuni meccanismi aggiuntivi per PKCS11, se l'attuale standard PKCS11 lo supporta. * " –
Ovviamente l'API di Bouncy Castle contiene un'implementazione per eseguire la modalità GCM. Cercherò di costruirlo nel provider dopo aver terminato la mia cripto-università in standford. –
Come Bhavik menzionato sopra, BouncyCastle sarebbe un buon modo per andare, è leggero e maturo. Puoi sicuramente vedere i progressi della crittografia in quanto puoi controllare quanto leggere e scrivere contemporaneamente. È possibile leggere i byte da un file, crittografarli e riscrivere su un altro file in una pipeline.
Un esempio di questo è menzionato in questa domanda: How to encrypt a string/stream with bouncycastle pgp without starting with a file
- 1. Crittografia con AES-256 Java
- 2. Crittografia dei dati su Android, AES-GCM o semplice AES?
- 3. crittografia AES Java -> PHP -> Java
- 4. Equivalente Java della crittografia C# AES
- 5. Crittografia Java Castle Bouncy - Cifratura con AES
- 6. Crittografia AES 128 in Java Decryption in PHP
- 7. Crittografia di un file di grandi dimensioni con AES utilizzando JAVA
- 8. crittografia AES taglia testo in modalità CFB
- 9. AES-256 Crittografia/decrittografia basata su password in Java
- 10. Interruzione della crittografia AES utilizzando i dati decodificati
- 11. Crittografia AES per una NSString?
- 12. Lenta crittografia e decrittografia AES GCM con Java 8u20
- 13. Crittografia AES 256 in .NET Framework 2.0
- 14. Come implementare la crittografia AES 256-bit Java con CBC
- 15. AES (aes-ige-128, aes-ige-192, aes-ige-256) crittografia/decodifica con openssl C
- 16. AES (aes-cbc-128, aes-cbc-192, aes-cbc-256) crittografia/decrittografia con openssl C
- 17. Crittografia AES Python e crittografia Ruby - comportamento diverso?
- 18. Crittografia AES per una NSString su iPhone
- 19. Come rompere la crittografia AES-128 utilizzata in WinRar?
- 20. Crittografia AES di 16 byte senza sale
- 21. Questa crittografia AES è abbastanza sicura?
- 22. Esempio di AES utilizzando Crypto ++
- 23. Come verificare se il file è crittografato utilizzando AES (Rijndael)
- 24. NSData-AES Classe di crittografia/decrittografia in Cocoa
- 25. decifrare i dati con AES/CBC/PKCS5Padding utilizzando blackberry
- 26. Crittografia tramite AES-128 in Android e IPhone (risultato diverso)
- 27. C# Esempio di crittografia AES256 utilizzando System.Security.Cryptography.Aes
- 28. I valori di crittografia gestiti da AES terminano sempre in ==?
- 29. - La classe RijndaelManaged in C# è equivalente alla crittografia AES?
- 30. Java AES CBC decrittografia
Quanta sicurezza desideri? Generalmente più debole è la crittografia, più veloce sarà e vice versa. –
È possibile utilizzare l'API 'BouncyCastel'. –
@NoxHarmonium: come dovrei misurarlo? ;-) Ho bisogno che i file siano il più sicuri possibile. Non mi interessa che la crittografia sia lenta, voglio solo che funzioni alla massima velocità possibile. (Intendo qualcosa come copia di file usando 'java.io' e' java.nio') – RYN