Serializzazione Java - Variabili visibili nell'editor di testo

0

Quando serializzo la mia classe e la salvo come estensione di file personalizzata, alcune delle variabili e delle importazioni sono visibili quando apri il file in un editor di testo. C'è un modo per evitarlo o esiste un metodo alternativo per salvare le istanze di classe come un file? Il mio file che salva il codice:

//Make file
FileOutputStream fileOut = new FileOutputStream("fileName.ext");
ObjectOutputStream out;
out = new ObjectOutputStream(fileOut);
out.writeObject(instanceToSave);
out.close();
fileOut.close();

instanceToSave è un'istanza di classe in cui la classe implementa java.io.Serializable.

Nota: non intendo variabili transitorie.

    
posta Jaggler3 11.06.2015 - 00:55
fonte

1 risposta

6

Prima di tutto, consiglio vivamente di leggere un po 'sulla serializzazione Java. Questo articolo è un po 'datato ma copre l'essenziale.

In particolare, questo bit è importante:

2. Serialization is not secure

It often comes as an unpleasant surprise to Java developers that the Serialization binary format is fully documented and entirely reversible. In fact, just dumping the contents of the binary serialized stream to the console is sufficient to figure out what the class looks like and contains.

Questo significa che la serializzazione predefinita non può essere invocata per offuscare o proteggere il contenuto degli oggetti.

Tuttavia esiste un modo che può essere in grado di raggiungere ciò di cui hai bisogno. Puoi scrivere metodi di serializzazione personalizzati sulla classe che viene serializzata in cui puoi trasformare i dati come desideri. Tieni presente che nella migliore delle ipotesi puoi sperare di offuscare o rallentare qualcuno dalla lettura dei dati.

public class MyClass implements Serializable {
  private String secret;
  ...
  private void writeObject(ObjectOutputStream out) throws IOException {
    out.writeObject(encrypt(secret));
  }

  private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
    ename = decrypt(in.readUTF());
  }

  private String encrypt(String plaintext) {
    return ...;
  }

  private String decrypt(String ciphertext) {
    return ...;
  }
}
    
risposta data 11.06.2015 - 01:40
fonte

Leggi altre domande sui tag