我正在开发一个应该加密一些小文件(小于 1MB)和大文件(大约 500MB)的应用程序。
如何加密文件并将加密版本有效地保存在磁盘上的某个位置(即快速)?
如果花时间我可以有加密进度吗?
最佳答案
假设您有一个 AES key 和一些输出流,下面介绍了如何向流中添加加密装饰器。
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 的基础。这记录了有关可用于解密的算法和 key 的元数据。
如果您的供应商实现了 AEAD 模式,如 GCM 或 CCM,我也会推荐它。 (SunJCE 没有。)这些将验证文件是否已正确解密,并且没有损坏。
关于java - 在java中使用AES有效加密文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11920192/