Come altri hanno già detto, ci sono una miriade di modi per serializzare i dati. Puoi usare qualcosa di leggero come SQLite o semplicemente la serializzazione. Basta rendersi conto che qualsiasi tentativo di crittografare i dati può essere vanificato, specialmente nel caso del codice Java, poiché può essere facilmente invertito.
Tuttavia, se la maggior parte degli utenti non è abbastanza tecnica da comprendere le complessità del reverse engineering di un programma Java per capire come decrittografare i dati, si dovrebbe essere in grado di cavarsela con alcuni metodi di crittografia di base come quello che era menzionato in un'altra risposta ed essere buono. Basta rendersi conto che ogni volta che qualcosa risiede su una macchina che non controlli, non c'è modo di impedire agli utenti più persistenti di capire come craccarla.
Io personalmente suggerirei l'utilizzo di sqlite e l'utilizzo di una semplice crittografia sui dati inseriti nei campi, quindi se qualcuno è abbastanza intelligente da potersi connettere al file DB locale, devono comunque invertire l'algoritmo di crittografia in alcuni maniera. Il 99,9% degli utenti regolari non si preoccuperà di questo livello di indagine.
Naturalmente non c'è nulla che gli impedisca di serializzare su uno stream soggetto a compressione e/o crittografia. Non sarà mai infrangibile, ma potrebbe essere abbastanza vicino a non infrangibile. Se ne vale la pena? Probabilmente non nella maggior parte dei casi. – Fredrik
No. Se l'applicazione che crittografa lo stream è in esecuzione sul computer dell'utente finale, qualsiasi tipo di crittografia è una perdita di tempo assoluta poiché, come ho scritto, è molto facile eseguirlo in modalità di debug e strappare i dati prima viene crittografato (a parte il fatto che l'app dovrebbe contenere la chiave di crittografia). –