2010-09-24 11 views

risposta

45

Il Preferences API è un bel modo per memorizzare le preferenze dell'utente e di sistema. Se si desidera memorizzare le password, sarà necessario crittografarle. Ecco un bell'articolo che può iniziare.

Encrypted Preferences in Java

+14

Dove dobbiamo conservare la chiave richiesta? –

+5

Nice tutorial introduttivo qui: http://www.mkyong.com/java/java-properties-file-examples/ –

+0

Voglio sottolineare che su Windows potresti dover cambiare registro se usi Preferenze. Per un normale utente dell'applicazione, questo potrebbe essere un blocco (no-go!). –

25

solito memorizzano nella directory dei dati utente, con sotto le directory di nome dell'applicazione seguito da versione dell'applicazione.

public static String getUserDataDirectory() { 
    return System.getProperty("user.home") + File.separator + ".jstock" + File.separator + getApplicationVersionString() + File.separator; 
} 

avevo usato il seguente codice per 3 anni. Questo metodo funziona abbastanza bene in Windows, Linux o Mac.

Si prega di notare che, in Windows, non memorizzarlo mai in Program Files, in quanto UAC in Windows Vista o più recente potrebbe darvi un sacco di problemi.

Ricordare di inserire un punto davanti al nome dell'applicazione, in modo che diventi una cartella nascosta in Linux.

La cosa buona utilizzando questa metologia è che non si è limitati a memorizzare solo il valore primitivo. Invece, è possibile salvare l'intero stato oggetto al disco utilizzando xstream

Ad esempio:

public static boolean toXML(Object object, File file) { 
    XStream xStream = new XStream(); 
    OutputStream outputStream = null; 
    Writer writer = null; 

    try { 
     outputStream = new FileOutputStream(file); 
     writer = new OutputStreamWriter(outputStream, Charset.forName("UTF-8")); 
     xStream.toXML(object, writer); 
    } 
    catch (Exception exp) { 
     log.error(null, exp); 
     return false; 
    } 
    finally { 
     close(writer); 
     close(outputStream); 
    } 

    return true; 
} 
+0

Ma è sicuro? Stai memorizzando le password in testo semplice? – djna

+1

C'è un caso per memorizzare le password in testo semplice, al contrario di semplicemente offuscarle - l'offuscamento dà un falso senso di sicurezza. Vedi ad esempio http://developer.pidgin.im/wiki/PlainTextPasswords – gustafc

+0

Prima di memorizzare una password, userò http://www.jasypt.org/ per eseguire la crittografia. Attualmente, ho crittografato la mia chiave di crittografia nella mia applicazione. Una volta pensavo di lasciare all'utente la chiave specifica. Tuttavia, ciò potrebbe impedire all'utente medio di utilizzare la mia app in quanto è piuttosto difficile spiegare quale sia la chiave. Quindi, rinuncio all'idea. Finora, non mi lamento per problemi di sicurezza. –

13

Memorizzazione di una singola password in modo sicuro è abbastanza difficile. Supponiamo che si cripta la password usando una chiave segreta. Quindi, quando la tua app inizia nuovamente, ha bisogno di quella chiave segreta, da dove viene presa?

Se chiede all'utente, potrebbe anche semplicemente inserire la password ftp che è stata memorizzata in primo luogo. Se legge la chiave segreta da qualche parte, allora devi proteggere la chiave segreta e siamo tornati dove abbiamo iniziato.

Se si mantengono più password, chiedere all'utente una singola password per alcuni "vault" può essere molto più amichevole, ma si ha quindi il fastidio di gestire password scadute.

Ci sono prodotti disponibili per trattare questo mosto di roba, se avete un bisogno serio allora probabilmente avete bisogno di investigare su di esso.

Problemi correlati