Skip to content

Instantly share code, notes, and snippets.

@sturlath
Last active January 10, 2017 14:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sturlath/99cfbfff26e0ebd12ea73316d0843330 to your computer and use it in GitHub Desktop.
Save sturlath/99cfbfff26e0ebd12ea73316d0843330 to your computer and use it in GitHub Desktop.
Encrypting SecureString to regular string
/// <summary>
/// Encrypts a SecureString to a regular string.
/// </summary>
/// <remarks>This is a draft that Im hoping to get comments on in http://stackoverflow.com/a/26202992/1187583</remarks>
public static string EncryptSecureStringToRegularString(this SecureString secureString)
{
var pointer = IntPtr.Zero;
try
{
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
var myRsa = (from X509Certificate2 x509 in store.Certificates where x509.FriendlyName == EngineSettings.Settings.CertificateFriendlyName select (RSACryptoServiceProvider)x509.PrivateKey).FirstOrDefault();
pointer = Marshal.SecureStringToGlobalAllocUnicode(secureString);
byte[] byteArray = Encoding.ASCII.GetBytes(Marshal.PtrToStringUni(pointer));
return Encoding.ASCII.GetString(myRsa.Encrypt(byteArray, true));
}
finally
{
Marshal.ZeroFreeGlobalAllocUnicode(pointer);
}
}
//And then the usage
var encodedString = secureString.EncryptSecureStringToRegularString();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment