2009-08-16 11 views
5

Qual è il modo migliore per archiviare dati tra le esecuzioni del programma in Java? So già che è possibile utilizzare un file di testo e archiviare le informazioni in questo modo, ma mi chiedevo se esiste un modo migliore per archiviare le informazioni generate dal programma tra le esecuzioni del programma.Il modo migliore per memorizzare i dati tra le esecuzioni del programma in java?

Inoltre, c'è un modo per farlo in modo da mantenere le informazioni sicure? In particolare, voglio mantenere l'utente finale dall'essere in grado di accedervi.

risposta

5

mi chiedevo se ci fosse un modo altra ponendo l'informazione che viene genereated dal programma tra le esecuzioni del programma?

semplicemente utilizzare un ObjectOutputStream per serializzare in un file ed un ObjectInputStream per tornare indietro.

Inoltre c'è un modo per farlo in modo che mantenga le informazioni protette? da l'utente finale è in grado di accedervi?

Se il codice viene eseguito sul sistema dell'utente finale allora no, non v'è alcun modo per impedire loro di ottenere i dati - non è nemmeno degno il vostro tempo a cercare di codificare in qualche modo, dal momento che è facile collegare un debugger e ispezionare lo stato del programma mentre è in esecuzione. Come formato binario, la serializzazione Java impedirà agli utenti non tecnici di decifrarlo, ed è praticamente il meglio che si possa sperare.

+0

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

+1

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). –

1

Crittografia su file o database locale con password.

2

È possibile utilizzare Properties per memorizzare le informazioni. Se vuoi renderlo sicuro, eseguilo attraverso una sorta di encryption stream.

+0

E se si vuole esagerare, arrotolare il proprio formato binario e crittografarlo. – Esko

1

Si potrebbe utilizzare db4o per memorizzare i dati. È un database di oggetti e supporta la crittografia.

0

La cosa migliore da utilizzare quando si inizia Java è quello di utilizzare un file di testo o ObjectOutputStream. Una volta che hai più esperienza allora puoi usare i database.

0

Che ne dici di serializzazione?

Non può essere letto dall'utente ed è relativamente facile.

0

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.

+0

Inoltre, il 92,3% delle statistiche sono compilate in loco! – MattC

+0

@MattC: hai sbagliato tutto, è al 97% :-D – Fredrik

1

Alcune persone hanno suggerito di utilizzare la serializzazione. Fai attenzione che ci sono una serie di svantaggi per la serializzazione.

  • Il problema di versione. Se si modifica qualcosa nelle classi serializzate, i file serializzati scritti con la vecchia versione del programma non possono più essere letti facilmente.
  • Non si conosce il formato esatto del file. Sarà davvero difficile se vuoi scrivere un programma diverso più tardi, possibilmente in un linguaggio di programmazione diverso, che ha bisogno di leggere il file.

La serializzazione non è particolarmente adatta per la conservazione a lungo termine.

Suggerirei invece di utilizzare un piccolo database incorporato. (Un database incorporato è un database che viene eseguito nello stesso processo del programma). Si noti che Java di Sun include Java DB, che è una versione di Apache Derby. C'è anche HSQLDB, che è un altro piccolo e puro database Java che può essere usato come un database incorporato.

0

XML come tecnica di serializzazione è più resistente ai futuri cambiamenti nel programma che regolerà lo spazio di archiviazione di formati binari come la serializzazione degli oggetti. Tuttavia ciò renderebbe molto leggibile e modificabile dalla maggior parte degli utenti.

Una compressione/decompressione molto semplice impedirebbe quasi a tutti gli utenti di ottenere il contenuto effettivo dei dati. L'uso di GZipInputStream/GZipOutputStream attorno al flusso di scrittura corrente farà il suo lavoro. Più elaborate la vostra difesa contro la curiosità, maggiore sarà l'impatto sugli utenti del vostro software.

Problemi correlati