Cómo convertir String
en SecureString
?Convertir cadena a SecureString
Respuesta
No es así. La razón principal para usar el objeto SecureString es evitar la creación de un objeto de cadena (que se carga en la memoria y se mantiene allí en texto sin formato hasta la recolección de basura). Sin embargo, puede agregar caracteres a SecureString agregándolos.
var s = new SecureString();
s.AppendChar('d');
s.AppendChar('u');
s.AppendChar('m');
s.AppendChar('b');
s.AppendChar('p');
s.AppendChar('a');
s.AppendChar('s');
s.AppendChar('s');
s.AppendChar('w');
s.AppendChar('d');
Voy a tirar esto por ahí. ¿Por qué?
No puede simplemente cambiar todas sus cadenas para asegurar cadenas y de repente su aplicación es "segura". La cadena segura está diseñada para mantener la cadena cifrada durante el mayor tiempo posible, y solo se descifra durante un período de tiempo muy corto, borrando la memoria después de que se haya realizado una operación.
Me atrevería a decir que puede tener algunos problemas de nivel de diseño para tratar antes de preocuparse por la seguridad de sus cadenas de aplicaciones. Danos más información sobre lo que tratas de hacer y podremos ayudarlo mejor.
sólo quiero usarlo para establecer una contraseña para ProcessStartInfo y ejecutar mi exe como otro usuario. . Eso funcionó para mí ... – Nila
Mi aplicación está asegurada ejecutándola en un sistema seguro. No me podría importar menos que esta cadena en particular sea encriptada en la memoria. Hay información mucho más vital sobre este sistema de la que preocuparse si alguna vez se compromete. SecureString es simplemente requerido por una API de Microsoft que mi programa necesita utilizar. Se implica que el desarrollador considere su propio caso de uso y determine si la conversión de cadenas a SecureStrings es una operación válida en contexto. – Dan
estoy de acuerdo con Spence (1), pero si lo estás haciendo para el aprendizaje o de prueba pourposes, se puede utilizar un foreach en la cadena, añadiendo cada char a la SecureString utilizando el método AppendChar .
debajo método ayuda a convertir la serie para asegurar la cadena
private SecureString ConvertToSecureString(string password)
{
if (password == null)
throw new ArgumentNullException("password");
var securePassword = new SecureString();
foreach (char c in password)
securePassword.AppendChar(c);
securePassword.MakeReadOnly();
return securePassword;
}
+1, pero tenga en cuenta que al pasar la contraseña como un parámetro de cadena se crea una instancia de cadena desencriptada en la memoria administrada y se frustra el propósito de 'SecureString' en primer lugar. Simplemente señalando esto para las personas futuras que vengan y usen este código. – Cody
@Cody Es cierto, y es un buen punto, pero a muchos de nosotros no nos importa si SecureString es seguro o no y solo lo estamos usando porque algunos API de Microsoft lo requieren como parámetro. – Dan
Usted puede seguir este:
string password = "test";
SecureString sec_pass = new SecureString();
Array.ForEach(password.ToArray(), sec_pass.AppendChar);
sec_pass.MakeReadOnly();
unsafe
{
fixed(char* psz = password)
return new SecureString(psz, password.Length);
}
Aquí es un truco barato LINQ.
SecureString sec = new SecureString();
string pwd = "abc123"; /* Not Secure! */
pwd.ToCharArray().ToList().ForEach(c => sec.AppendChar(c));
/* and now : seal the deal */
sec.MakeReadOnly();
Esta respuesta es un ejercicio consiste en ver cuántas copias temporales del texto sin formato se pueden generar en un solo disparo –
Si desea comprimir la conversión de un string
a un SecureString
en un comunicado LINQ
se puede expresar de la siguiente manera:
var plain = "The quick brown fox jumps over the lazy dog";
var secure = plain
.ToCharArray()
.Aggregate(new SecureString()
, (s, c) => { s.AppendChar(c); return s; }
, (s) => { s.MakeReadOnly(); return s; }
);
Sin embargo, tenga en cuenta que el uso LINQ
no mejora la seguridad de esta solución. Sufre del mismo defecto que cualquier conversión de string
a SecureString
. Mientras el original string
permanezca en la memoria, los datos son vulnerables.
Dicho esto, lo que la afirmación anterior puede ofrecer es mantener unida la creación del SecureString
, su inicialización con datos y finalmente bloquearlo para que no se modifique.
sin LINQ de fantasía, no sumando todos los caracteres a mano, simplemente y simple:
var str = "foo";
var sc = new SecureString();
foreach(char c in str) sc.appendChar(c);
incluso más elegante, sin necesidad de definir una variable – bigworld12
aquí hay un trazador: 'var sc = new SecureString(); foreach (char c en "foo") sc.appendChar (c); ' – bigworld12
También hay otra manera de convertir entre SecureString
y String
.
1. Cadena a SecureString
SecureString theSecureString = new NetworkCredential("", "myPass").SecurePassword;
2.SecureString a cadena
string theString = new NetworkCredential("", theSecureString).Password;
Aquí está el link
¡Esta es la mejor solución para el caso de uso más común! – Dan
No tiene sentido utilizar 'SecureString' si su código crea un objeto' string' con el valor que desea proteger. El objetivo de 'SecureString' es evitar tener la cadena en la memoria administrada, por lo que un atacante que examine esa memoria puede detectar el valor que desea ocultar. Dado que el constructor 'NetworkCredential' que está llamando requiere una cadena, ese no es el camino a seguir ... Claro, su código es una forma fácil de convertir a un SecureString y desde él, pero usarlo hace que su código sea tan seguro como usar un simple 'cadena' –
Los siguientes 2 extensiones debe hacer el truco:
Para una matriz
char
public static SecureString ToSecureString(this char[] _self) { SecureString knox = new SecureString(); foreach (char c in _self) { knox.AppendChar(c); } return knox; }
Y para
string
public static SecureString ToSecureString(this string _self) { SecureString knox = new SecureString(); char[] chars = _self.ToCharArray(); foreach (char c in chars) { knox.AppendChar(c); } return knox; }
Gracias a John Dagg por la recomendación AppendChar
.
se puede utilizar este script sencillo
private SecureString SecureStringConverter(string pass)
{
SecureString ret = new SecureString();
foreach (char chr in pass.ToCharArray())
ret.AppendChar(chr);
return ret;
}
Esta respuesta [se publicó hace 15 meses] (https://stackoverflow.com/a/38326325/11683). Realmente no hubo necesidad de publicarlo de nuevo. – GSerg
Un enfoque más sencillo que se puede utilizar:
# Take password and convert it to a secure string
$mySS = "MyCurrentPassword" | ConvertTo-SecureString -AsPlainText -Force
- 1. ¿SecureString es seguro?
- 2. Convertir cadena a Uri
- 3. Convertir XElement a cadena
- 4. Convertir cadena a System.IO.Stream
- 5. cadena convertir a matriz
- 6. Convertir cadena a Enum?
- 7. Convertir cadena a char
- 8. ¿Convertir int a cadena?
- 9. Uso de SecureString
- 10. Guardar un SecureString
- 11. ¿Cómo uso SecureString de forma segura?
- 12. ¿Convertir cadena latin1 a utf8?
- 13. PHP convertir cadena a matriz
- 14. Cómo convertir cadena [] a ArrayList?
- 15. Convertir una cadena a variable
- 16. Convertir cadena a tipo C#
- 17. Convertir palabras (cadena) a Int
- 18. Convertir cadena a evaluación matemática
- 19. Convertir SVGSVGElemento a la Cadena
- 20. cómo convertir JSON a cadena
- 21. Cómo convertir cadena a larga
- 22. convertir una cadena a Stream
- 23. cadena Convertir a 2 lugar
- 24. Perl: ¿Convertir cadena a referencia?
- 25. Convertir cadena a doble - VB
- 26. Convertir cadena hexadecimal a int
- 27. Convertir cadena hexadecimal a larga
- 28. Haskell: Convertir Int a cadena
- 29. Cómo convertir cadena a "iso-8859-1"?
- 30. Convertir cadena a Clob en Java
No olvides hacer que sea solo de lectura en pantalla(); – ysrb
"La combinación es' 12345' ... ¡ese es el tipo de cosas que un idiota tiene en su equipaje! " –
Todo lo que veo es '*****' –