我创建了加密解密方法来加密图像和视频。我正在对视频进行部分加密,确切地说是 1 MB。更复杂的解密方法需要很长时间才能解密 android 设备上的内容。然而 img_decrypt 根本不需要很长时间。不知道他们为什么这样做。
这是一个。这个可以解密完全加密的视频或图像。以毫秒为单位解密完整图像,但无法解密部分加密的视频。
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();
}
}
因为解密()方法需要很长时间才能解密一个 100KB 的文件,所以设备要求我中止或等待。
如果我使用 img_decrypt() 它根本不会工作。这对我来说毫无意义,他们在做同样的事情。
我试图使用decrypt() 来解密视频的第一个MB。
在计算机上一切正常。
任何想法都可能会有所帮助。
这两种方法都适用于解密完全加密的文件,但 decrypt() 花费的时间太长。
还有一件事。decrypt() 对写入的数据进行解密。img_decrypt() 对读取的数据进行解密。不知道这是否会影响任何事情。
谢谢