java - 在java中使用AES有效加密文件

标签 java encryption aes

我正在开发一个应该加密一些小文件(小于 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/

相关文章:

php - 我可以向用户提供一个加密的字符串并确保它在 1-2 小时内是安全的吗

java - 混淆使用 AES 和 Hmac 的客户端和服务器如何相互验证

python - AES 加密 Golang 和 Python

java - 底部导航 View 随着 windowSoftInputMode=adjustResize 上升

java - Android 切换按钮更改状态

java - 如何解决maven提供的范围问题

powershell - 如何隐藏powershell脚本模块代码

java - 了解 LongWritable

bash - 如何使用 openssl 将加密/解密消息输出到 stdout

encryption - ZigBee 绿色电源 AES-CCM