byte[] Variable in Datei schreiben?

  • Themenstarter Themenstarter ByeBye 203306
  • Beginndatum Beginndatum
B

ByeBye 203306

Hey,

ich komme gerade bei meinem Programm nicht weiter. Und zwar muss ich eine Variable des Typs byte[] in eine Datei schreiben, allerdings bekomme ich es nicht hin.

Code:
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(crypt.ALGORITHM);
                keyPairGen.initialize(1024); // 1024 maximale Schluesselbreite
                KeyPair keyPair = keyPairGen.generateKeyPair();
                PrivateKey privKey = keyPair.getPrivate(); 
                PublicKey pubKey = keyPair.getPublic();

                FileWriter fw = new FileWriter("Daten/konten.prk", true);
                byte[] bytes;
                byte[] encrypt = "".getBytes();
                byte[] decrypt = "".getBytes();

                for(int i = 0; i < daten.toArray().length; i++) {

                    bytes = daten.get(i).toString().getBytes();
                    
                    encrypt = crypt.encrypt(pubKey, bytes);
                }
                
                fw.write(encrypt);
                fw.close();

daten ist hierbei eine ArrayList. Diese wird verschlüsselt und die verschlüsselten Daten sollen nun in die Datei konten.prk geschrieben werden. Wie bewerkstellige ich das jetzt? Denn bei "fw.write(encrypt);" gibt er mir eine Fehlermeldung.

Hat jemand einen Tip?

Grüße,
MacMo
 
Hi,
könntest du vieleicht mal die Fehlermeldung posten? Insbesondere den Namen der Exception?
Außerdem würde ich es eh mit einer Serialisierung bewerkstelligen, oder müssen die Daten von einem anderen Programm ausgelesen werden?
Ciao
DosCoder
 
NetBeans gibt mir folgende Fehlermeldung aus:

Code:
symbol  : method write(byte[])
location: class java.io.FileWriter
fw.write(encrypt);

Ich programmiere in Java noch nicht so lange. Was meinst du mit Serialisierung?
Die Daten werden vom selben Programm wieder ausgelesen. Sollen eben verschlüsselt sein und da habe ich mir diesen Verschlüsslungsalgorithmus gegoogelt.
 
Hi.
Seriealisierung ist das "Flachpressen" von Objekten. Wie du weißt, werden Objekte nach Programmende gelöscht. Um dies zu vermeiden speichert man sie ab. Entweder als *.ser (dabei kommt irgendeine, nicht für Menschen gedachte, Zeichenfolge heraus, oder als normale Datei, was wesentlich mehr auf die Performance geht. Hier kannst du zu beiden Sachen nachlesen:
Serialisierung: Java ist auch eine Insel
Normales Abspeichern:Java ist auch eine Insel

Zu der Fehlermeldung: sonst zeigt NB nix an? Keine Zeilennummer oder sowas?

Ciao
DosCoder
 
Danke für die Links, werde ich mir mal anschauen.

NetBeans zeigt vor dem Programmstart schon an, dass er "encrypt" nicht in die Datei schreiben kann, weil es eben vom Typ byte ist. Also suche ich eine Möglichkeit Variablen vom Typ byte in eine Datei zu schreiben.

Edit: Das Problem ist ja nicht, die in die Datei zu schreiben. Das Funktioniert mit einem ganz normalen String. Nur die Variable encrypt will er nicht schreiben.


Bild 1.jpg
 
Zuletzt bearbeitet von einem Moderator:
Hi,
dann ist die Sache doch einfach. Mach aus deinem Byte nen Integer, damit kommt der FileWriter zurecht:
Java:
        byte r = 1;
        int i;
        i = (int)r;
Ciao
DosCoder
 
Funktioniert leider auch nicht. Ich denke, da es sich um ein Byte-Array handelt.

Was ich vergessen habe zu erwähnen. Der Inhalt der Variable encrypt ist RSA verschlüsselt. Vielleicht ist das noch von Bedeutung.

Danke schon mal für die Antworten.
 
Java:
        try {            
            Cipher cipher = Cipher.getInstance(secureDeviceKey.getAlgorithm());
            cipher.init(Cipher.ENCRYPT_MODE, secureDeviceKey);
            String password = "1234";
            byte[] encrypted = cipher.doFinal(password.getBytes());            
            System.out.println("encrypted=" + new String(encrypted));
            File f = new File("test.txt");
            FileOutputStream fos = new FileOutputStream(f);
            fos.write(encrypted);
            fos.close();
            FileInputStream fis = new FileInputStream(f);
            byte[] data = new byte[(int) f.length()];
            fis.read(data);
            cipher.init(Cipher.DECRYPT_MODE, secureDeviceKey);
            byte[] decrypted  = cipher.doFinal(data);            
            System.out.println("decrypted=" + new String(decrypted));
        } catch (Throwable t) {
            t.printStackTrace();
        }
 
Zurück