Ich habe Verschlüsselungsentschlüsselungsmethoden zum Verschlüsseln von Bildern und Videos erstellt. Ich verschlüssele die Videos teilweise, 1 MB um genau zu sein. Die kompliziertere Entschlüsselungsmethode dauert zu lange, um den Inhalt auf dem Android-Gerät zu entschlüsseln. Das img_decrypt dauert jedoch nicht lange. Nicht sicher, warum sie es tun.Warum läuft meine eine Entschlüsselungsmethode viel schneller als die andere?
Hier ist die eine .Diese kann vollständig verschlüsselt Videos oder Bilder entschlüsseln. Entschlüsselt ganze Bilder in ms, wie es nicht funktioniert, um teilweise verschlüsselte Videos zu entschlüsseln.
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) {
}
}
Und hier ist der andere. Das dauert ewig. Entschlüsselt vollständig verschlüsselte Bilder oder teilweise verschlüsselte Videos.
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();
}
}
Da das Entschlüsseln() Methode nimmt SOOOOOO lang eine 100 KB-Datei zu entschlüsseln, fragt das Gerät mir abzubrechen oder zu warten.
Wenn ich img_decrypt() verwenden, funktioniert es in keiner Zeit überhaupt. Was für mich keinen Sinn macht, machen sie das Gleiche.
Ich versuche, entschlüsseln() zu verwenden, um den ersten MB des Videos zu entschlüsseln.
Auf dem Computer funktioniert alles gut.
Alle Gedanken könnten hilfreich sein.
Beide Methoden funktionieren zum Entschlüsseln einer vollständig verschlüsselten Datei, entschlüsseln() nehmen jedoch viel zu lange.
Eine weitere Sache. Entschlüsseln() entschlüsselt die Daten beim Schreiben. img_decrypt() entschlüsselt die Daten beim Lesen. Keine Ahnung ob das irgendwas bewirkt.
Danke
Nur neugierig: Wenn der hässliche, verwirrende Code auch langsam ist, warum stört es Sie? – erickson
AppendableOutputStream out_append = new AppendableOutputStream (out); Überschreibt das close(), sodass das übergeordnete Element nicht geschlossen wird. BTW – user1086377
Nach vielen Tests. out_d.write() ist es, was es verlangsamt. Aber in der anderen Methode ist out.write viel schneller. Mit der img_decrypted() -Methode wird das Speichern von Videos, die vollständig entschlüsselt wurden, in etwa 4 Sekunden ausgeführt. Decrypted 1 MB mit dem anderen nehmen Sie rund 20. – user1086377