2015-09-13 53 views
8

Costruisco un programma C#, da eseguire su Win10. Voglio inviare e-mail da questo programma (risultati del calcolo) semplicemente premendo un pulsante. Inserisco da: indirizzo e-mail e oggetto: ecc. In proprietà C#, ma non voglio inserire una password di testo in chiaro nel programma, E non voglio che l'utente debba digitare la password per il server ogni volta che viene inviata una mail.Come memorizzare e recuperare le credenziali su Windows utilizzando C#

Può essere fatto?

Se sì, come (in generale)?

Stavo pensando di inserire tutte le informazioni di posta elettronica, inclusa una password crittografata per il server in un file di dati da leggere durante l'avvio del programma.

O forse Win10 ha una funzione per questo ...

risposta

14

È possibile utilizzare API di Windows Gestione credenziali. In questo modo chiederai all'utente la password solo una volta e poi memorizzera la password in Gestione credenziali di Windows. La prossima volta che la tua app si avvia e deve utilizzare la password, la leggerà da Gestione credenziali di Windows. È possibile utilizzare l'API di gestione delle credenziali di Windows direttamente utilizzando pinvoke (credwrite, CredRead, example here) o se si desidera utilizzare facilmente wrapper C# è possibile controllare CredentialManagement.

utilizzo Esempio:

public class PasswordRepository 
{ 
    private const string PasswordName = "ServerPassword"; 

    public void SavePassword(string password) 
    { 
     using (var cred = new Credential()) 
     { 
      cred.Password = password; 
      cred.Target = PasswordName; 
      cred.Type = CredentialType.Generic; 
      cred.PersistanceType = PersistanceType.LocalComputer; 
      cred.Save(); 
     } 
    } 

    public string GetPassword() 
    { 
     using (var cred = new Credential()) 
     { 
      cred.Target = PasswordName; 
      cred.Load(); 
      return cred.Password; 
     } 
    } 
} 

non mi consiglia di conservare le password in file su macchine client, anche se si esegue la crittografia della password si avrà probabilmente incorporare la chiave di decrittazione del codice dell'applicazione che non è una buona idea .

+0

Grazie. Chiaro. – Erik