我正在開發一個應加密一些小(小於1MB)和大(大約500MB)文件的應用程序。
如何加密文件並在磁盤上的某個位置有效保存加密版本(即快速)?
如果花費時間,我可以進行加密嗎?在java中使用AES有效加密文件
回答
假設你有一個AES密鑰和一些輸出流,這裏是你如何添加一個加密裝飾器到流中。
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);
這將IV添加到密文的開頭;當解密時,你需要解析出來初始化密碼。
長期來看,更好的解決方案是使用實現加密消息語法的庫,這是S/MIME的基礎。它記錄有關可用於解密的算法和密鑰的元數據。
如果你的提供者實現它,我還會推薦一個像GCM或CCM這樣的AEAD模式。 (SunJCE不會)。這些將驗證文件是否正確解密,並且沒有被破壞。
@owlstead我知道現在有GCM的API,並且期望SunJCE提供它,但是當我去檢查時,我找不到它[在文檔中](http://docs.oracle.com)。您是否知道Oracle有義務通過包含的JCE提供商提供該服務? – erickson 2012-08-12 15:39:52
糟糕我的道歉,我可能在那裏使用了非標準的構建路徑。來源:「* Java SE已經在JDK 7中定義了AEAD/GCM接口。在JDK 8中,JCA/JCE提供程序將實現這些AEAD/GCM接口。如果我們還添加了一些額外的PKCS11機制,當前的PKCS11標準支持它。*「 – 2012-08-12 17:33:20
當然,Bouncy Castle API確實包含一個執行GCM模式的實現。我會在結束我的斯坦福大學加密課程後嘗試將其構建到提供程序中。 – 2012-08-12 17:38:44
正如Bhavik在上面提到的那樣,BouncyCastle將是一個不錯的選擇,它的輕量級和成熟性。您一定可以看到加密的進度,因爲您可以控制一次讀取和寫入多少內容。您可以從文件中讀取字節,對它們進行加密並將其寫回管道中的另一個文件。 How to encrypt a string/stream with bouncycastle pgp without starting with a file
- 1. 如何使用aes在java中加密/解密文件?
- 2. 加密文件使用AES
- 3. 使用AES加密來加密文件
- 4. 使用Java中的RSA公鑰文件加密AES密鑰
- 5. 使用java解密C#中的AES加密文件
- 6. 在Java中使用AES-128加密
- 7. 使用AES CBC加密Java
- 8. AES Java加密
- 9. 用AES加密的文件?
- 10. 解密用java和AES文件中的OBJ-C加密
- 11. 如何解密CryptoJS中的文件,通過JAVA用AES加密
- 12. 如何使用AES加密java中的文件
- 13. Java AES文件加密內存問題
- 14. AES加密,解密在Java中
- 15. Node.js使用AES加密大文件
- 16. CryptoJS AES加密和Java AES解密
- 17. AES加密C#解密Java?
- 18. AES加密和解密Java
- 19. 使用預先存在的AES密鑰解密Java文件
- 20. 使用AES加密/解密
- 21. 使用AES在Java中加密/解密圖像的提示
- 22. 用於文件AES加密/解密的Java類
- 23. AES 256加密文件C#
- 24. 識別AES加密文件
- 25. 如何使用AES解密使用openssl命令加密的Java文件?
- 26. 如何使用Java更新aes加密
- 27. 使用AES/CBC/PKCS7Padding進行JAVA加密
- 28. 使用Java和PHP進行AES加密
- 29. 使用Python M2Crypto AES加密與Java
- 30. 使用java和WP7進行AES加密
多少安全,你需要:
這樣的例子在這個問題被提及?通常,加密越弱,速度越快,反之亦然。 – 2012-08-12 06:37:18
您可以使用'BouncyCastel' API。 – 2012-08-12 06:42:58
@NoxHarmonium:我應該如何測量它? ;-)我需要儘可能安全的文件。我不在乎加密速度慢,我只希望它能以最大速度工作。 (我的意思是使用'java.io'和'java.nio'進行文件拷貝) – RYN 2012-08-12 06:43:30