Moin moin,
stehe vor dem Problem, dass der BufferedReader scheinbar etwas anderes einliest als zu vor mit BufferedWriter geschrieben wurde, hier ein
Auszug aus den jeweiligen Methoden (lasst euch von dem Code nicht abschrecken):
Ausführung:
Joa und die Ausgabe in der Konsole sieht wie folgt aus:
Hier sieht man schon das beim zweiten eingelesene Byte der ersten Einleserunde der "Entschlüsselungsrunde" nicht mit dem ersten geschriebenen Block der Verschlüsselungsrunde übereinstimmt. Die Dateien werden zwischenzeitlich nicht mehr verändert. Wie kommt es dann zu diesen Differenzen?
Ich hoffe ihr könnt mir helfen!!
Viele Grüße
stehe vor dem Problem, dass der BufferedReader scheinbar etwas anderes einliest als zu vor mit BufferedWriter geschrieben wurde, hier ein
Auszug aus den jeweiligen Methoden (lasst euch von dem Code nicht abschrecken):
Java:
// bis = BufferedReader
public byte[] readByteBlock(int blockSize)
{
// Prüfen ob wir am Ende der Datei sind
byte[] inBytes;
if ( fileReaderPosition >= fileLength)
{
// Dateiende
return null;
}
// Dimensioniert das Array auf die gewünschte Blockgröße oder auf bis zum Dateiende
else if ((fileReaderPosition + blockSize) > fileLength)
{
inBytes = new byte[(int)(fileLength - fileReaderPosition)];
}
else
{
inBytes = new byte[blockSize];
}
System.out.println("Liest ByteBlock (" + inBytes.length + "):");
try
{
for (int i = 0; i < inBytes.length; i ++)
{
fileReaderPosition ++;
inBytes[i] = (byte)bis.read();
System.out.print(inBytes[i] + " ");
}
System.out.println();
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
return (inBytes);
}
// bw= BufferedWriter
public void write(byte[] data) throws IOException
{
System.out.println("Schreibe Blöcke (" + data.length + "):");
for (int i = 0; i < data.length; i ++)
{
bw.write(data[i]);
System.out.print(data[i] + " ");
}
System.out.println();
}
Java:
System.out.println("Verschlüsselungsrunde");
cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
FileReader fr = new FileReader("D:\\test.txt");
FileWriter fw = new FileWriter("D:\\ausgabe.txt");
byte[] data = fr.readByteBlock(53);
while (data != null)
{
// cipher.doFinal(data) gibt ein 64 großes Byte-Array zurück
fw.write(cipher.doFinal(data));
data = fr.readByteBlock(53);
}
fw.close();
fr.close();
System.out.println("Entschlüsselungsrunde");
cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
fr = new FileReader("D:\\ausgabe.txt");
fw = new FileWriter("D:\\ausgabe2.txt");
//for (int i = 0; i < decryptBytes.length; i ++)
data = fr.readByteBlock(64);
while (data != null)
{
fw.write(cipher.doFinal(data));
data = fr.readByteBlock(64);
}
fw.close();
fr.close();
Code:
Verschlüsselungsrunde
Liest ByteBlock (53):
72 97 108 108 111 44 32 100 105 101 115 32 105 115 116 32 101 105 110 32 84 101 115 116 33 33 72 97 108 108 111 44 32 100 105 101 115 32 105 115 116 32 101 105 110 32 84 101 115 116 33 33 72
Schreibe Blöcke (64):
72 11 109 29 -58 -89 3 99 85 82 24 -117 94 -43 119 10 58 -25 123 46 84 112 29 -8 -99 -128 124 115 28 73 -119 56 105 -109 -110 -119 46 -78 -42 37 -45 -63 -85 -127 92 61 118 13 98 7 -19 -67 104 -85 101 51 -102 98 -35 -109 -46 -58 -34 -23
[...] (weitere Runden) [...]
Entschlüsselungsrunde
Liest ByteBlock (64):
72 11 109 29 63 63 3 99 85 82 24 63 94 63 119 10 58 63 123 46 84 112 29 63 63 63 124 115 28 73 63 56 105 63 63 63 46 63 63 37 63 63 63 63 92 61 118 13 98 7 63 63 104 63 101 51 63 98 63 63 63 63 63 63
Ich hoffe ihr könnt mir helfen!!
Viele Grüße