Last active
January 10, 2017 14:38
-
-
Save sturlath/99cfbfff26e0ebd12ea73316d0843330 to your computer and use it in GitHub Desktop.
Encrypting SecureString to regular string
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// <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