¿Cómo convertir String
a SecureString
?
c#
.net
security
securestring
Desarrollador404
fuente
fuente
12345
... ¡ese es el tipo de cosas que un idiota tiene en su equipaje!"*****
AppendChar
no se ejecuta hasta el tiempo de ejecución, por lo que esos caracteres aún se pueden leer desde el IL, ¿correcto? Tal vez algo de ofuscación en tiempo de compilación también ayudaría ... es decir, si está codificando contraseñas.También hay otra forma de convertir entre
SecureString
yString
.1. Cadena a SecureString
2. SecureString a String
Aqui esta el enlace
fuente
SecureString
si su código crea unstring
objeto con el valor que desea proteger. El objetivoSecureString
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 elNetworkCredential
constructor al que llama requiere una cadena, ese no es el camino a seguir ... Claro, su código es una forma fácil de convertir ay desde un SecureString, pero usarlo hace que su código sea tan seguro como usar un simplestring
SecureString
cuando trabajamos con algunas bibliotecas. Y seamos honestos aquí, si alguien está escaneando activamente la memoria de su aplicación, entonces ya ha perdido. Incluso si ha utilizado SecureString correctamente, lo que nunca he visto, habrá otros datos valiosos para extraer.El siguiente método ayuda a convertir cadenas en cadenas seguras
fuente
Puedes seguir esto:
fuente
Aquí hay un truco barato de linq.
fuente
Voy a tirar esto por ahí. ¿Por qué?
No puede simplemente cambiar todas sus cadenas a cadenas seguras y de repente su aplicación es "segura". La cadena segura está diseñada para mantener la cadena encriptada durante el mayor tiempo posible, y solo se desencripta por un período de tiempo muy corto, borrando la memoria después de que se haya realizado una operación.
Me arriesgaría a decir que puede tener algunos problemas de nivel de diseño con los que lidiar antes de preocuparse por proteger las cadenas de su aplicación. Danos más información sobre lo que estás tratando de hacer y podremos ayudarte mejor.
fuente
fuente
sin linq elegante, sin agregar todos los caracteres a mano, simplemente simple y llanamente:
fuente
var sc = new SecureString(); foreach(char c in "foo") sc.appendChar(c);
Estoy de acuerdo con Spence (+1), pero si lo está haciendo para aprender o probar los propósitos, puede usar un foreach en la cadena, agregando cada carácter a la cadena de seguridad utilizando el método AppendChar.
fuente
Sólo quiero señalar a todo el pueblo diciendo: "Ese no es el punto de
SecureString
", que muchas de las personas que piden esta pregunta podría ser en una aplicación en la que, por cualquier razón, justificada o no, son no particularmente preocupados acerca de tener una copia temporal de la contraseña se encuentra en el montón como una cadena compatible con GC, pero tienen que usar una API que solo acepteSecureString
objetos. Entonces, tienes una aplicación donde no te importasi la contraseña está en el montón, tal vez es solo para uso interno y la contraseña solo está allí porque es requerida por los protocolos de red subyacentes, y encuentra que esa cadena donde se almacena la contraseña no se puede usar, por ejemplo, para configurar un PowerShell remoto Runspace, pero no hay una línea sencilla y directa para crear lo queSecureString
necesita. Es un inconveniente menor - pero probablemente vale la pena para asegurarse de que las aplicaciones que realmente hacen es necesarioSecureString
No tiente a los autores el usoSystem.String
oSystem.Char[]
intermediarios. :-)fuente
Si desea comprimir la conversión de
string
a aSecureString
en unaLINQ
declaración, puede expresarla de la siguiente manera:Sin embargo, tenga en cuenta que el uso
LINQ
no mejora la seguridad de esta solución. Sufre el mismo defecto que cualquier conversión destring
aSecureString
. Mientras el originalstring
permanezca en la memoria, los datos son vulnerables.Dicho esto, lo que la declaración anterior puede ofrecer es mantener juntos la creación del
SecureString
, su inicialización con datos y finalmente bloquearlo de la modificación.fuente
Las siguientes 2 extensiones deberían hacer el truco:
Para una
char
matrizY para
string
Gracias a John Dagg por la
AppendChar
recomendación.fuente
puedes usar este simple script
fuente