2010-10-14 21 views

risposta

4

Per esigenze di crittografia semplici, ho utilizzato DPAPI tramite la classe ProtectedData. Per rendere memorizzabile il valore crittografato risultante in un file di testo o registro, codifico l'array di byte risultante.

Qui è la classe che ho scritto per avvolgere questo in su:

namespace SomeNamespace 
{ 
    using System; 
    using System.Security.Cryptography; 
    using System.Text; 

    /// <summary> 
    /// used for encryption and decryption 
    /// </summary> 
    public static class DataProtector 
    { 
     private const string EntropyValue = "secret"; 

     /// <summary> 
     /// Encrypts a string using the DPAPI. 
     /// </summary> 
     /// <param name="stringToEncrypt">The string to encrypt.</param> 
     /// <returns>The encrypted data.</returns> 
     public static string EncryptData(string stringToEncrypt) 
     { 
     byte[] encryptedData = ProtectedData.Protect(Encoding.Unicode.GetBytes(stringToEncrypt), Encoding.Unicode.GetBytes(EntropyValue), DataProtectionScope.LocalMachine); 
     return Convert.ToBase64String(encryptedData); 
     } 

     /// <summary> 
     /// Decrypts a string using the DPAPI. 
     /// </summary> 
     /// <param name="stringToDecrypt">The string to decrypt.</param> 
     /// <returns>The decrypted data.</returns> 
    public static string DecryptData(string stringToDecrypt) 
     { 
     byte[] decryptedData = ProtectedData.Unprotect(Convert.FromBase64String(stringToDecrypt), Encoding.Unicode.GetBytes(EntropyValue), DataProtectionScope.LocalMachine); 
     return Encoding.Unicode.GetString(decryptedData); 
     } 
    } 
} 
+0

Sì, grazie al tuo codice sono riuscito a farlo da solo ... Ti amo !!! –

2

Se si cripta la password, sarà comunque necessario memorizzare una chiave di decodifica da qualche parte nel programma, quindi equivale comunque a sicurezza per oscurità.

Tuttavia, è mantenere onesta la gente onesta.

La pratica più comune che ho visto per questo è un sistema di sfida/risposta, in cui l'utente inserisce un nome di registrazione, il programma fornisce una stringa di sfida, e le invii tramite e-mail la stringa di risposta corrispondente (criptata), che il l'utente taglia e incolla in una finestra di dialogo di registrazione nel programma. Il programma decifra la risposta, la confronta con la sfida e via.

Naturalmente, dal momento che è ancora necessario fornire la password di decrittografia nel programma stesso, può ancora essere sconfitto da un hacker determinato.

4

Un modo semplice per farlo è crittografare la password con se stessa. Non sarai mai in grado di decrittografarlo, ma potrai confrontare una password inserita dall'utente.

+0

+1 Mi piace questa idea. –

+0

Puoi darmi un suggerimento come posso "criptare la password con se stessa" ... Cosa intendi con questo? Grazie. –

+1

Sospetto che l'OP voglia archiviare la password in modo che l'utente non debba ripeterlo di nuovo ... Se è il caso, questa soluzione non è molto utile;) –

Problemi correlati