A
Andy2
Gast
Hallo Leute, ich hab mir ein Verschlüsselungsprogramm gemacht und es ist so gut wie fertig nur hab ich noch ein kleines Problem beim File schreiben mit dem "BufferedWriter".
Funktionsweise:
Datei binär einlesen mit einem gleichgrossen Key XOR verbinden
Problem:
Nachdem eine Datei verschlüsselt wurde muss sie neu geschrieben werden, vorher hab ich dies mit dem "FileOutputStream" gemacht, dies funktionierte gut, nur ging es viel zu lange. Dann hab ich den "FileOutputStream" durch den "BufferedWriter" ersetzt jetzt wird die Datei schnell geschrieben, doch jetzt ist sie fehlerhaft. Wahrscheinlich hat dies mit der Byte Interpretation vom "BufferedWriter" zu tun, ich weiss es nicht, hoffentlich kann mir jemand helfen.
-Zuunterst im Code ist die alte Methode (auskommentiert). Mit ihr funktionierte es fehlerfrei, nur viel zu langsam!
Funktionsweise:
Datei binär einlesen mit einem gleichgrossen Key XOR verbinden
Problem:
Nachdem eine Datei verschlüsselt wurde muss sie neu geschrieben werden, vorher hab ich dies mit dem "FileOutputStream" gemacht, dies funktionierte gut, nur ging es viel zu lange. Dann hab ich den "FileOutputStream" durch den "BufferedWriter" ersetzt jetzt wird die Datei schnell geschrieben, doch jetzt ist sie fehlerhaft. Wahrscheinlich hat dies mit der Byte Interpretation vom "BufferedWriter" zu tun, ich weiss es nicht, hoffentlich kann mir jemand helfen.
-Zuunterst im Code ist die alte Methode (auskommentiert). Mit ihr funktionierte es fehlerfrei, nur viel zu langsam!
Code:
import java.io.*;
public class Encrypt {
Encrypt(String filename, String ex, String keypath) throws IOException{
File file = new File(filename+ex); //File Pfad
byte[] bo = getBytesFromFile(file); //Original File in bytes konvertieren
File file2 = new File(keypath); //Key Pfad
byte[] bk = getBytesFromFile(file2); //Schlüssel in bytes konvertieren
for(int i=0; i<bo.length; i++){
//XOR um das File zu Verschlüsseln
bo[i] ^= bk[i];
}
//Schreibe Verschlüsselungsfile
writeEncryption(bo, filename, ex);
}
// Returns the contents of the file in a byte array.
public static byte[] getBytesFromFile(File file) throws IOException {
InputStream is = new FileInputStream(file);
// Get the size of the file
long length = file.length();
// You cannot create an array using a long type.
// It needs to be an int type.
// Before converting to an int type, check
// to ensure that file is not larger than Integer.MAX_VALUE.
if (length > Integer.MAX_VALUE) {
// File is too large
}
// Create the byte array to hold the data
byte[] bytes = new byte[(int)length];
// Read in the bytes
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}
// Ensure all the bytes have been read in
if (offset < bytes.length) {
throw new IOException("Could not completely read file "+ file.getName());
}
// Close the input stream and return bytes
is.close();
return bytes;
}
private void writeEncryption(byte[] bo, String filename, String ex) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter(filename+"_versch_"+ex));
int length = bo.length;
for(int i=0; i<length; i++){
//Bytearray in bw schreiben
bw.write(bo[i]);
}
//bw speichern / schliessen
bw.close();
// ALTE METODE, ist zu langsam
/* FileOutputStream outFile = new FileOutputStream(filename+"_versch_"+ex);
for(int i=0; i<bo.length; i++){
outFile.write(bo[i]);
}
outFile.close();*/
}