c# securestring

c# - Cómo convertir una cadena a segmentación explícitamente



securestring (6)

Quiero que el texto ingresado en el cuadro de texto se convierta en segurida en c # Gracias por responder con anticipación.


Debe hacer SecureString de solo lectura. Entonces el código debería verse así:

static class SecureStringExtensions { public static string ToUnsecureString(this SecureString secureString) { if (secureString == null) throw new ArgumentNullException("secureString"); var unmanagedString = IntPtr.Zero; try { unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(secureString); return Marshal.PtrToStringUni(unmanagedString); } finally { Marshal.ZeroFreeGlobalAllocUnicode(unmanagedString); } } public static SecureString ToSecureString(this string unsecureString) { if (unsecureString == null) throw new ArgumentNullException("unsecureString"); return unsecureString.Aggregate(new SecureString(), AppendChar, MakeReadOnly); } private static SecureString MakeReadOnly(SecureString ss) { ss.MakeReadOnly(); return ss; } private static SecureString AppendChar(SecureString ss, char c) { ss.AppendChar(c); return ss; } }


El enfoque más simple es iterar sobre la cadena fuente y anexar un carácter a la vez a la cadena segura, de esta manera:

var secure = new SecureString(); foreach (char c in textbox1.Text) { secure.AppendChar(c); }


Estoy sorprendido de que nadie me haya mencionado sobre el constructor SecureString que toma el puntero a la matriz char.

public static SecureString ToSecureString(this string source) { char[] charArray = source.ToCharArray(); unsafe { fixed (char* chars = charArray) { return new SecureString(chars, charArray.Length); } } }

Tenga en cuenta que este código solo funciona con la opción /unsafe compilador /unsafe . Para establecer esta opción, vaya a las propiedades del proyecto, la ficha Construir y marque la casilla de verificación Permitir código no seguro.


Inventa una vez y vuelve a usar lotes. Cree un método de extensión simple para extender la clase base de cadena y almacenarla en alguna clase de utilidades estáticas.

using System.Security; /// <summary> /// Returns a Secure string from the source string /// </summary> /// <param name="Source"></param> /// <returns></returns> public static SecureString ToSecureString(this string source) { if (string.IsNullOrWhiteSpace(source)) return null; else { SecureString result = new SecureString(); foreach (char c in source.ToCharArray()) result.AppendChar(c); return result; } }

y luego llame de la siguiente manera:

textbox1.Text.ToSecureString();


Puede ser un poco tarde, pero puede convertir SecureString a String de esta manera, ya sea

using System.Security; . . . /// <summary> /// Converts String to SecureString /// </summary> /// <param name="input">Input in String</param> /// <returns>Input in SecureString</returns> public SecureString String2SecureString(String input) { SecureString _output = new SecureString(); input.ToCharArray().ToList().ForEach((q) => _output.AppendChar(q)); return _output; }

aunque es lo mismo que la respuesta de Balazs Tihanyi:

Google es tu amigo...

var secure = new SecureString(); foreach(char c in textbox1.Text) { secure.AppendChar(c); }


use esto para el controlador de eventos en su cuadro de texto:

private void textbox1_TextChanged(object sender, EventArgs e) { SecureString newSecureTextBox = new SecureString(); foreach (char c in textbox1.Text.ToCharArray()) { newSecureTextBox.AppendChar(c); } }

llame a su variable normalmente como newSecureTextBox