【发布时间】:2012-01-29 19:38:59
【问题描述】:
我正在做一些文件加密相关的工作。我能够加密/解密文件,但面临一个主要的性能问题。当我简单地读/写一个 700 MB 大小的视频文件时,我的代码以大约 27-28 MB/s 的速度执行。但是当我执行加密时(我目前正在使用 PBEWithMD5AndDES,我稍后会更改)代码显示速度为 9 MB/s。 请告知我在哪里可以改进。
代码sn-p:
int c = 0, BUF_SIZE = 8192;
byte[] b = new byte[BUF_SIZE];
FileInputStream fis;
DataInputStream dis;
FileOutputStream fos;
DataOutputStream dos;
CipherOutputStream cos;
try {
// Create PBE parameter set
pbeParamSpec = new PBEParameterSpec(salt, iterationCount);
// Create PBE Cipher
Cipher pbeCipher = Cipher.getInstance(algorithm);
// get key
key = generateKeyFromPassword(password);
// Initialize PBE Cipher with key and parameters
pbeCipher.init(Cipher.ENCRYPT_MODE, key, pbeParamSpec);
fis = new FileInputStream(inFile);
dis = new DataInputStream(fis);
fos = new FileOutputStream(outFile);
dos = new DataOutputStream(fos);
cos = new CipherOutputStream(fos, pbeCipher);
while ((c = dis.read(b)) > 0) {
cos.write(b);
//dos.write(b);
}
fis.close();
dis.close();
//dos.close();
cos.close();
} catch (Exception e) {
e.printStackTrace();
}
未加密的统计数据:
速度约为 27.97 MB/s
准确时间 = 25.02 秒
文件大小 = 700 MB
加密统计:
速度约为 9.69 MB/s
准确时间 = 72.171 秒
文件大小 = 700 MB
【问题讨论】:
-
您是否尝试过其他块密码,例如 AES?
-
你有什么样的CPU?正确完成后,即使在较旧的硬件上,AES 加密也应超过 30MB/s。
-
我正在开发 CPU:intel i3 @ 2.27 GHz 操作系统:Ubuntu 10.10
-
较新的英特尔 i 处理器具有针对此类任务进行了优化的加密指令集。也许这会给你一个巨大的速度提升。 software.intel.com/en-us/articles/…
-
@Thomas 我的 i3 没有 AES 指令,但即使没有它们,我也希望他的计算机上的 AES 的每个核心 >50MB/s。
标签: java performance encryption