Tôi đang phát triển một ứng dụng cần mã hóa một số tệp nhỏ (nhỏ hơn 1MB) và lớn (khoảng 500MB).
Làm cách nào để mã hóa tệp và lưu phiên bản được mã hóa ở đâu đó trên đĩa một cách hiệu quả (tức là nhanh)?
Tôi có thể có tiến trình mã hóa nếu mất thời gian không?Mã hóa hiệu quả các tệp bằng AES trong java
Trả lời
Giả sử bạn có khóa AES và một số luồng đầu ra, dưới đây là cách bạn có thể thêm trình trang trí mã hóa vào luồng.
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);
Điều này thêm IV vào phần đầu của văn bản mật mã; khi giải mã, bạn cần phân tích cú pháp đó để khởi tạo mật mã.
Một giải pháp tốt hơn, lâu dài hơn, là sử dụng thư viện triển khai Cú pháp thông báo mật mã, cơ sở cho S/MIME. Điều này ghi lại siêu dữ liệu về các thuật toán và các khóa có thể được sử dụng để giải mã.
Tôi cũng khuyên bạn nên sử dụng chế độ AEAD như GCM hoặc CCM nếu nhà cung cấp của bạn triển khai chế độ này. (SunJCE không.) Những điều này sẽ xác minh rằng tệp được giải mã chính xác và không bị hỏng.
@owlstead Tôi biết API hiện có cho GCM và dự kiến SunJCE sẽ cung cấp cho nó, nhưng khi tôi kiểm tra, tôi không thể tìm thấy đề cập đến nó [trong tài liệu.] (Http://docs.oracle. com/javase/7/docs/technotes/guides/security/SunProviders.html) Bạn có biết bất kỳ cam kết nào của Oracle để cung cấp cho nó thông qua một nhà cung cấp JCE được bao gồm không? – erickson
Rất tiếc, tôi có thể đã sử dụng đường dẫn xây dựng không chuẩn ở đó. Từ nguồn: "* Java SE đã định nghĩa các giao diện AEAD/GCM trong JDK 7. Trong JDK 8, các nhà cung cấp JCA/JCE sẽ triển khai các giao diện AEAD/GCM này. Chúng tôi cũng có khả năng thêm một số cơ chế bổ sung cho PKCS11, nếu tiêu chuẩn PKCS11 hiện tại hỗ trợ nó. * " –
Tất nhiên, API Bouncy Castle có chứa triển khai thực hiện chế độ GCM. Tôi sẽ cố gắng và xây dựng nó vào nhà cung cấp sau khi kết thúc lớp học mật mã đại học Standford của tôi. –
Như Bhavik đã đề cập ở trên, BouncyCastle sẽ là một cách tốt để đi, trọng lượng nhẹ và trưởng thành của nó. Bạn chắc chắn có thể thấy sự tiến bộ của mã hóa khi bạn có thể kiểm soát bao nhiêu để đọc và viết cùng một lúc. Bạn có thể đọc các byte từ một tệp, mã hóa chúng và ghi lại một tệp khác trong một đường dẫn.
Một ví dụ về điều này được đề cập trong câu hỏi này: How to encrypt a string/stream with bouncycastle pgp without starting with a file
- 1. Mã hóa AES với giải mã mở bằng java
- 2. Mã hóa với AES-256 Java
- 3. AES mã hóa bằng công cụ dòng lệnh openssl và giải mã trong Java
- 4. Mã hóa AES Java -> PHP -> Java
- 5. Mã hóa AES Javascript
- 6. Mật mã Java Bouncy Castle - Mã hóa với AES
- 7. Mã hóa bằng AES-128 trong Android và IPhone (Kết quả khác nhau)
- 8. Mã hóa AES 128 của Android
- 9. Làm thế nào để mã hóa trong VBScript bằng AES?
- 10. Mã hóa AES trong CryptoJS và giải mã trong Coldfusion
- 11. Mã hóa AES và C#
- 12. Lớp mã hóa C++ AES
- 13. Tư vấn về hiệu suất mã hóa tệp trong Java
- 14. Mã hóa AES đơn giản bằng cách sử dụng WinAPI
- 15. Mã hóa AES bằng Python có dạng khác nhau iOS
- 16. AES Mã hóa và lưu trữ khóa?
- 17. Mã hóa/giải mã lớp NSData-AES trong Cocoa
- 18. Mã hóa và giải mã bằng mã hóa AES và Base64
- 19. Mã hóa AES cách vận chuyển IV
- 20. Mã hóa tên tệp trong Java
- 21. Mã hóa AES cho một NSString?
- 22. Làm thế nào để mã hóa các tệp bằng Ruby?
- 23. Mã hóa dữ liệu trên Android, AES-GCM hoặc AES thuần túy?
- 24. Mã hóa/giải mã AES giữa Ruby-OpenSSL, PyCrypto
- 25. mã hóa AES cắt văn bản trong chế độ CFB
- 26. Memory hiệu quả trong Java
- 27. Thay đổi mã hóa tệp hiện có bằng Java?
- 28. API Java để mã hóa/giải mã các tệp pdf
- 29. Mã hóa/giải mã AES (aes-ige-128, aes-ige-192, age-ige-256) với openssl C
- 30. Tìm kiếm trong đầu vào được mã hóa bằng AES-CTR
bao nhiêu an ninh nào bạn yêu cầu? Nói chung mã hóa càng yếu thì tốc độ càng nhanh và ngược lại. –
Bạn có thể sử dụng API 'BouncyCastel'. –
@NoxHarmonium: Tôi nên đo lường bằng cách nào? ;-) Tôi cần tệp càng an toàn càng tốt. Tôi không quan tâm đến việc mã hóa được làm chậm Tôi chỉ muốn nó làm việc ở mức tối đa nó có thể đi. (Tôi có nghĩa là một cái gì đó giống như bản sao tập tin bằng cách sử dụng 'java.io' và' java.nio') – RYN