我正在开发一个应用程序,需要对一些小文件(小于1MB)和大文件(约500MB)进行加密。
有什么方法可以高效地对这些文件进行加密,并将加密后的版本保存在磁盘的某个位置呢?
如果花费了一定时间,能否显示加密进度?
我正在开发一个应用程序,需要对一些小文件(小于1MB)和大文件(约500MB)进行加密。
有什么方法可以高效地对这些文件进行加密,并将加密后的版本保存在磁盘的某个位置呢?
如果花费了一定时间,能否显示加密进度?
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添加到密码文本的开头;在解密时,您需要解析出来以初始化密码。
长期而言,更好的解决方案是使用实现加密消息语法(Cryptographic Message Syntax)的库,这是S/MIME的基础。它记录有关可用于解密的算法和密钥的元数据。
如果您的提供商支持,我还建议使用GCM或CCM等AEAD模式。 (SunJCE不支持这些模式。)这些模式将验证文件是否已正确解密并且未被损坏。
BouncyCastle
API。 - Bhavik Ambanijava.io
和java.nio
进行文件复制之类的操作) - Ariyan