浏览 6260 次
锁定老帖子 主题:java版AES文件加密速度问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-06
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; public class AES { // 加密文件 public static void encryptfile(String pwd, File fileIn) throws Exception { try { //读取文件 FileInputStream fis = new FileInputStream(fileIn); byte[] bytIn = new byte[(int) fileIn.length()]; for (int i = 0; i < fileIn.length(); i++) { bytIn[i] = (byte) fis.read(); } //AES加密 KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128, new SecureRandom(pwd.getBytes())); SecretKey skey = kgen.generateKey(); byte[] raw = skey.getEncoded(); SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); //写文件 byte[] bytOut = cipher.doFinal(bytIn); FileOutputStream fos = new FileOutputStream(fileIn.getPath() + ".aes"); for (int i = 0; i < bytOut.length; i++) { fos.write((int) bytOut[i]); } fos.close(); fis.close(); } catch (Exception e) { throw new Exception(e.getMessage()); } } public static void main(String[] args) throws Exception { AES aes = new AES(); String pwd = "123"; File file = new File("d:/xxx.doc"); aes.encryptfile(pwd, file); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-07-07
几点问题:
1.输入输出没有加Buffer. 2.没有用异步处理。 |
|
返回顶楼 | |
发表时间:2007-07-07
还有byte[] bytIn = new byte[(int) fileIn.length()];
文件大了,内存的占用很厉害。 建议用固定大小的缓冲区代替。 |
|
返回顶楼 | |
发表时间:2007-07-09
for (int i = 0; i < bytOut.length; i++) {
fos.write((int) bytOut[i]); } 你这样一个一个byte读写是很慢的 建议你用这2个方法 write(byte[] b) 将指定字节数组中 b.length 字节写入当前文件输出流。 write(byte[] b , int off, int len) 将指定字节数组中以偏移量 off开始的 len个字节写入当前文件输出流。 |
|
返回顶楼 | |