Sto usando la funzione incorporata di Visual C# Impostazioni per salvare alcune delle opzioni del mio programma. Voglio anche memorizzare una password, ma poi diventa pubblica ... è possibile crittografare la password prima di salvarla utilizzando questo metodo di impostazione e quindi decrittografarla?Qual è la procedura migliore per salvare le password utilizzando la funzione Impostazioni C#?
risposta
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);
}
}
}
Sì, grazie al tuo codice sono riuscito a farlo da solo ... Ti amo !!! –
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.
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.
+1 Mi piace questa idea. –
Puoi darmi un suggerimento come posso "criptare la password con se stessa" ... Cosa intendi con questo? Grazie. –
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;) –
- 1. Qual è la migliore pratica per le API pubbliche C++?
- 2. Qual è la procedura migliore per limitare le pagine specifiche agli utenti registrati solo in Codeigniter?
- 3. Qual è la procedura migliore per le connessioni MongoDB su Node.js?
- 4. Qual è la procedura migliore per condividere le lezioni tra un'app Wear e un'app Android?
- 5. Typescript & Jquery: qual è la procedura migliore per chiamare una classe nella funzione onclick di Jquery?
- 6. Qual è il modo migliore per salvare le impostazioni utente nell'applicazione java?
- 7. Qual è la migliore libreria OAuth2 C#?
- 8. Qual è la procedura migliore per la distribuzione di un'applicazione come statica o dinamica?
- 9. Nei servizi Web XML, qual è la procedura migliore per trasferire nuovamente le eccezioni al client?
- 10. Qual è la procedura migliore per gestire tutte le eccezioni nell'applicazione WPF?
- 11. Qual è la procedura migliore per denominare le proprietà che sono oggetti?
- 12. Qual è la procedura migliore per archiviare le stringhe di messaggistica UI in Python/Django?
- 13. Qual è la procedura migliore per denominare metodi privati e statici privati in C#?
- 14. Qual è il modo migliore per separare la stringa utilizzando la funzione string.format() o LINQ?
- 15. Qual è la migliore pratica per le impostazioni app/utente in Meteor.js?
- 16. Qual è la procedura migliore per elencare e impostare la gestione in Redis?
- 17. Android: qual è la procedura migliore, utilizzando una stringa globale o intenti con dati aggiuntivi?
- 18. Qual è la procedura migliore per mantenere i dettagli utente autenticati in un'applicazione ASP.NET Intranet MVC
- 19. migliore modo salvare la password in MySQL, che può essere decifrato anche utilizzando php
- 20. Password dimenticata: qual è il metodo migliore per implementare una funzione di password dimenticata?
- 21. qual è la procedura migliore per implementare java di utilizzo i18n?
- 22. Qual è l'approccio migliore per la registrazione?
- 23. TDD: Qual è la procedura migliore per testare DataAnnotations in ASP.NET MVC 3?
- 24. qual è la procedura migliore per il pooling delle connessioni JDBC di Hive
- 25. Qual è la procedura migliore per impostare l'attributo html tramite PHP?
- 26. Qual è la procedura migliore per verificare se un oggetto viene modificato?
- 27. Qual è la procedura migliore durante la creazione di ID documento in couchdb?
- 28. Qual è la procedura migliore per non sovrascrivere altre funzioni associate a window.onformare?
- 29. Qual è la procedura migliore per includere file jar di terze parti in un programma Java?
- 30. Qual è la procedura migliore per esportare il canvas con immagini di alta qualità?
https://crackstation.net/hashing-security.htm – Soren