Quanto segue è tanto semplice quanto si ottiene, presupponendo che si voglia veramente essere in grado di crittografare/decrittografare una stringa e memorizzarla su disco. Si noti che non utilizza una password, ma utilizza il contesto di sicurezza dell'utente connesso System.Security.Cryptography.DataProtectionScope.CurrentUser per proteggere i dati.
public class SecureIt
{
static byte[] entropy = System.Text.Encoding.Unicode.GetBytes("Salt Is Not A Password");
public static string EncryptString(System.Security.SecureString input)
{
byte[] encryptedData = System.Security.Cryptography.ProtectedData.Protect(
System.Text.Encoding.Unicode.GetBytes(ToInsecureString(input)),
entropy,
System.Security.Cryptography.DataProtectionScope.CurrentUser);
return Convert.ToBase64String(encryptedData);
}
public static SecureString DecryptString(string encryptedData)
{
try
{
byte[] decryptedData = System.Security.Cryptography.ProtectedData.Unprotect(
Convert.FromBase64String(encryptedData),
entropy,
System.Security.Cryptography.DataProtectionScope.CurrentUser);
return ToSecureString(System.Text.Encoding.Unicode.GetString(decryptedData));
}
catch
{
return new SecureString();
}
}
public static SecureString ToSecureString(string input)
{
SecureString secure = new SecureString();
foreach (char c in input)
{
secure.AppendChar(c);
}
secure.MakeReadOnly();
return secure;
}
public static string ToInsecureString(SecureString input)
{
string returnValue = string.Empty;
IntPtr ptr = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(input);
try
{
returnValue = System.Runtime.InteropServices.Marshal.PtrToStringBSTR(ptr);
}
finally
{
System.Runtime.InteropServices.Marshal.ZeroFreeBSTR(ptr);
}
return returnValue;
}
}
Poi per crittografare una stringa:
var clearText = "Some string to encrypt";
var cypherText = SecureIt.EncryptString(SecureIt.ToSecureString(clearText));
E per decifrare successivamente:
var clearText = SecureIt.ToInsecureString(SecureIt.DecryptString(cypherText));
fonte
2012-01-16 00:28:58
questione connessa: [? Come crittografare una password per il salvataggio in un secondo momento in un file di database o di testo] (http://stackoverflow.com/questions/ 541.219/how-to-crittografare-a-parola-per-salvare-it-tardi-in-a-database o file di testo-). E molto, molto di più: [Domande contenenti 'C# cripta password'] (http://stackoverflow.com/search?q=c%23+encrypt+password). –
Nota che qualunque cosa tu faccia, tu * non * decifri * le password **. Piuttosto, ti assicuri che i due hash corrispondano. –
@CodyGray c'è un modo per inviare la password con hash nella stringa di connessione sql? – Odys