我创建了加密解密方法来加密图像和视频。我正在部分加密视频,确切地说是1 MB。更复杂的解密方法让位于解密Android设备上的内容。然而,img_decrypt并不需要很长时间。不知道他们为什么这样做。
这是一个 这个人可以解密完全加密视频或图像。以ms为单位解密完整图像无法解密部分加密的视频。
public void img_decrypt(InputStream in, OutputStream out) {
try {
// Bytes read from in will be decrypted
in = new CipherInputStream(in, dcipher);
// Read in the decrypted bytes and write the cleartext to out
int numRead = 0;
while ((numRead = in.read(buf)) >= 0 ) {
out.write(buf, 0, numRead);
}
out.close();
} catch (java.io.IOException e) {
}
}
这是另一个。这需要永远运行。将解密完全加密的图像或部分加密的视频。
public void decrypt(InputStream in, OutputStream out) {
try {
// Bytes written to out will be decrypted
AppendableOutputStream out_append = new AppendableOutputStream(out);
System.out.println(ecipher.getOutputSize(1024*1024));
OutputStream out_d = new CipherOutputStream(out_append, dcipher);
// Read in the decrypted bytes and write the cleartext to out
int numRead = 0;
int count = 0;
int max = 1024;
boolean out_d_closed = false;
while ((numRead = in.read(buf, 0, max)) > 0) {
count += numRead;
if(count <= ecipher.getOutputSize(1024*1024)){
out_d.write(buf, 0, numRead);
out_d_closed = false;
// last encryption pass, close buffer and fix max
if(count == ecipher.getOutputSize(1024*1024)){
// fix reading 1k in case max was decreased
max = 1024;
out_d.close();
out_d_closed = true;
}
// if next read will go over a meg, read less than 1k
else if(count + max > ecipher.getOutputSize(1024*1024))
max = ecipher.getOutputSize(1024*1024) - count;
}
// past the first meg, don't decrypt
else{
out.write(buf, 0, numRead);
}
}
if(!out_d_closed){
out_d.close();
}
out.close();
} catch (java.io.IOException e) {
e.printStackTrace();
}
}
因为decrypt()方法需要很长时间来解密100KB文件,设备会要求我中止或等待。
如果我使用img_decrypt(),它根本不工作。对我来说,没有任何意义他们正在做同样的事情。
我试图使用decrypt()来解密视频的第一个MB。
在电脑上一切正常。
任何想法都可能有所帮助。
这两种方法都可用于解密完全加密的文件,但解密()过程时间过长。
还有一件事。 decrypt()解密写入数据。 img_decrypt()解密读取的数据。不知道这是否会产生任何影响。
由于
答案 0 :(得分:0)
如果有人关心。 FilterOutputStream实现错误。 Sun写的写法错误了。必须覆盖写入才能正常工作。