/// <summary> /// Description of Settings. /// </summary> public class Settings:ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(ApplicationSettingsBase.Synchronized(new Settings()))); public static Settings Default { get { return defaultInstance; } } public Settings():base() { } [UserScopedSettingAttribute()] [DefaultSettingValueAttribute("false")] public bool PASS_SET { get { return (bool)this["PASS_SET"]; } private set { this["PASS_SET"] = value; } } [UserScopedSettingAttribute()] [DefaultSettingValueAttribute("")] /// <summary> /// <returns> null if !PASS_SET</returns> /// </summary> public string Password { get { return (PASS_SET)?ToInsecureString(DecryptString(this["Password"].ToString())):null;} set { this["Password"] = EncryptString(ToSecureString(value)); PASS_SET=true; } } static byte[] entropy = System.Text.Encoding.Unicode.GetBytes("Bumblebee Tuna, I can see your balls!"); 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; } }
Thursday, March 7, 2013
Simple way to save Password in a settings file.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment