Ich möchte eine verschlüsselte Datei mit einer magischen Zahl in ihrem ersten Zeichen erstellen.
Wenn ich die Datei verschlüsseln, geht alles gut, aber wenn ich zuerst die magische Zahl schreibe, dann wird der verschlüsselte Teil gekürzt.Android-Datei gekürzt/abgeschnitten
Ich verwende eine TXT-Datei zum Testen.
Dies ist mein Code:
FileInputStream fis= new FileInputStream(file)
[...]
//Write magic number
fos.write("%AES".getBytes(),0,4);
byte[] ivbytes = new byte[]{(byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g', (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n', (byte)'o', (byte)'p'};
IvParameterSpec iv = new IvParameterSpec(ivbytes);
while(pwd.length()<16) {
pwd+="_";
}
SecretKeySpec sks = new SecretKeySpec(pwd.getBytes(), "AES");
// Create cipher
Cipher cipher = Cipher.getInstance("AES/CFB8/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, sks,iv);
// Wrap the output stream
CipherOutputStream cos = new CipherOutputStream(fos, cipher);
while((k = fis.read(d)) > 0)
{
cos.write(d, 0, k);
}
// Flush and close streams.
cos.flush();
cos.close();
fis.close();
[...]
dies ist der hexadezimale Inhalt missing byte
Debuggen das gleiche wie die von 4 versetzt ist, aber wenn es Zeit für die letzte Lese ist, wird das Ergebnis turuncated.
Ich versuche, die Datei zu verschlüsseln, dann verwenden Sie eine zweite mit magischer Nummer gefolgt von einem Byte zu Byte kopieren, aber nichts ist es immer gleich.
für das Debuggen erstellen ich eine Textdatei mit der Sequenz „1234567890“ ich diese zwei with and without magicNumber
eine Rückkehr die richtige Reihenfolge, die otherone return „“
Debug, schaue k und die geschriebene Datei in hex, finde den Unterschied. – zaph
der Unterschied ist die Größe von dem, was ich als magische Zahl, die geschnitten wird, vorgesetzt, auch die Größe der erstellten Datei ist die gleiche wie das Original. –
Wo wird 'fis' erstellt? – zaph