Zajmuję się tworzeniem aplikacji, która powinna szyfrować niektóre małe (mniej niż 1 MB) i duże (około 500 MB) pliki.
Jak skutecznie szyfrować pliki i zapisywać zaszyfrowaną wersję na dysku (np.
Czy mogę wprowadzić szyfrowanie, jeśli zajęło to trochę czasu?Efektywne szyfrowanie plików za pomocą AES w java
Odpowiedz
Zakładając, że masz klucz AES i strumień wyjściowy, oto, jak możesz dodać dekorator szyfrowania do strumienia.
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);
To dodaje IV do początku tekstu zaszyfrowanego; podczas deszyfrowania musisz je przeanalizować, aby zainicjować szyfr.
Lepszym rozwiązaniem, długotrwałym, byłoby korzystanie z biblioteki implementującej składnię wiadomości kryptograficznych, która jest podstawą S/MIME. Zapisuje metadane dotyczące algorytmów i kluczy, które mogą być użyte do odszyfrowania.
Polecam również tryb AEAD, taki jak GCM lub CCM, jeśli dostawca go wdroży. (The SunJCE does not.) Te zweryfikują, że plik został odszyfrowany poprawnie i nie został uszkodzony.
@owlstead Wiem, że API jest już dostępne dla GCM i oczekiwałem, że SunJCE je dostarczy, ale kiedy poszedłem sprawdzić, nie mogłem znaleźć wzmianki o tym [w dokumentacji.] (Http://docs.oracle. com/javase/7/docs/technotes/guides/security/SunProviders.html) Czy znasz jakieś zobowiązanie firmy Oracle do dostarczenia jej za pośrednictwem dołączonego dostawcy JCE? – erickson
Ups, przepraszam, prawdopodobnie użyłem tam niestandardowej ścieżki kompilacji. Od źródła: "* Java SE już zdefiniowała interfejsy AEAD/GCM w JDK 7. W JDK 8 dostawcy JCA/JCE będą implementować te interfejsy AEAD/GCM. Prawdopodobnie dodamy dodatkowe mechanizmy dla PKCS11, jeśli Obecny standard PKCS11 go obsługuje. * " –
Oczywiście interfejs API Zamka Bouncy zawiera implementację do wykonywania trybu GCM. Postaram się go zbudować na dostawcę po zakończeniu mojej klasy kryptograficznej uniwersytetu Standford. –
Jak wspomniano wyżej o Bhaviku, BouncyCastle byłby dobrym rozwiązaniem, lekkim i dojrzałym. Zdecydowanie widać postęp szyfrowania, ponieważ możesz kontrolować ile przeczytać i pisać jednocześnie. Można odczytywać bajty z pliku, szyfrować je i zapisywać do innego pliku w potoku.
Przykładem tego jest wymieniona w tym pytaniu: How to encrypt a string/stream with bouncycastle pgp without starting with a file
- 1. Szyfrowanie dużego pliku za pomocą AES przy użyciu JAVA
- 2. Szyfrowanie AES z odszyfrowującym openssl za pomocą java
- 3. Java Bouncy Castle Cryptography - Szyfrowanie za pomocą AES
- 4. Szyfrowanie AES Java -> PHP -> Java
- 5. Efektywne przesyłanie dużych plików za pomocą Yesod
- 6. Szyfrowanie i deszyfrowanie AES Java z statycznym sekretem
- 7. Szyfrowanie łańcuchów za pomocą JASYPT - Java
- 8. Szyfrowanie/deszyfrowanie AES między Ruby-OpenSSL, PyCrypto
- 9. Szyfrowanie AES 256 w .NET Framework 2.0
- 10. Szyfrowanie AES w PowerShell i Pythonie
- 11. Java AES CBC Rozszyfrowanie
- 12. 7Zip dodaj szyfrowanie do plików
- 13. AES (aes-cbc-128, aes-cbc-192, aes-cbc-256) szyfrowanie/deszyfrowanie z openssl C
- 14. AES (aes-ige-128, aes-ige-192, aes-ige-256) szyfrowanie/deszyfrowanie z openssl C
- 15. Szyfrowanie klucza AES z kluczem publicznym RSA
- 16. Szyfrowanie i odszyfrowywanie za pomocą klucza prywatnego w języku Java
- 17. Pobieranie plików za pomocą Java
- 18. Proste szyfrowanie AES przy użyciu WinAPI
- 19. Szyfrowanie ciąg znaków Java
- 20. Szyfrowanie AES 16 bajtów bez użycia soli
- 21. Szyfrowanie AES dla NSString na iPhonie
- 22. Czy to szyfrowanie AES jest wystarczająco bezpieczne?
- 23. Szyfrowanie za pomocą klastra AlwaysOn
- 24. Szyfrowanie RSA .NET Szyfrowanie Java
- 25. iOS 5: Szyfrowanie danych AES-256 EncryptWithKey: nie znaleziono
- 26. Szyfrowanie plików XOR w iOS
- 27. Szyfrowanie PHP, deszyfrowanie Java
- 28. Szyfrowanie AES: InvalidKeyException: Długość klucza nie 128/192/256 bitów
- 29. Java: Efektywne filtrowanie ArrayList?
- 30. Wcięcie plików źródłowych Java za pomocą Eclipse
Ile bezpieczeństwo potrzebujesz? Zasadniczo im słabsze jest szyfrowanie, tym szybciej ono będzie i na odwrót. –
Możesz użyć 'BouncyCastel' API. –
@NoxHarmonium: Jak mam to zmierzyć? ;-) Potrzebuję plików, które będą tak bezpieczne, jak to tylko możliwe. Nie obchodzi mnie, że szyfrowanie jest powolne. Chcę tylko, żeby działało z maksymalną szybkością. (Mam na myśli coś w rodzaju kopiowania plików za pomocą 'java.io' i' java.nio') – RYN