Cifrado básico de contraseña y almacenamiento de contraseña en un archivo [cerrado]

pensando en hacer una pequeña modificación en mi formulario de inicio de sesión en lugar de poner la contraseña en mi código como una variable, ¿hay alguna manera de encriptarlo y almacenarlo en un archivo de texto para que cada vez que quiera iniciar sesión compare la contraseña del ¿¿Archivo de texto??

private void button1_Click(object sender, EventArgs e)
        {
            string username1 = "Richard";
            string password1 = "Peugeot";

            if (this.textBox1.Text == username1 && this.textBox2.Text == password1)
            {
                MessageBox.Show("Welcome Richard!", "Welcome");
                Form1 frm = new Form1();
                frm.Show();
                this.Hide();
            }
            else
                MessageBox.Show("Incorrect username or password", "Bad credentials");
        }

preguntado el 16 de abril de 13 a las 08:04

Básicamente, está buscando el cifrado de cadenas, que está bien documentado, consulte Cifrar / descifrar cadena en .NET. -

¿Te has buscado en Google al menos por un segundo y qué has intentado hasta ahora? (Ah, y como respuesta a tu pregunta sí, eso es posible) -

3 Respuestas

Seguro que puede, simplemente escriba la contraseña SHA1, o mejor, cifrada con SHA2 en su archivo y compárela cada vez (¡gracias a J. Steen por mencionar!), pero le recomiendo encarecidamente que no haz esto: esto no es seguro en absoluto.

Respondido 16 Abr '13, 08:04

E incluso para un método inseguro como este, no sugiera MD5. Ese algoritmo hash está criptográficamente roto. De hecho, SHA1 también es bastante inseguro. SHA2 parece un algoritmo lo suficientemente robusto (actualmente) para usar. =) - j steen

Gracias por esta pista, actualicé mi respuesta :-) - Akluth

Sugeriría almacenar su contraseña con hash en lugar de cifrada (hashing es una forma en que el cifrado es reversible). He escrito sobre esto aquí (Almacenamiento de contraseñas, cómo hacerlo bien).

También escribí un fragmento de código para codificar la cadena usando SHA512, el código está en VB.NET pero debería ser bastante simple moverlo a C#, el código está disponible aquí (Calcule el hash SHA512 de cadena o archivo).

Si aplica un hash a la contraseña y la compara con el hash que ha almacenado en el archivo, si los dos coinciden, entonces han proporcionado la misma contraseña que se utilizó originalmente.

Como J. Steen mencionó en el comentario a continuación que no había dejado en claro que también debe saltear sus hashes, esto es agregar una cadena predefinida a la contraseña antes de codificarla. Esto hace que sea más difícil para cualquiera forzar el texto sin formato. Entonces, por ejemplo, si la contraseña era Password1 (Sé qué contraseña tan increíble) agregaría una cadena que almacenaría en su aplicación al principio como ~{}:@>?!"£$)&(*$. Luego harías hash del valor ~{}:@>?!"£$)&(*$Password1. Cuando desee verificar que el usuario haya proporcionado la misma contraseña en el inicio de sesión, use la misma sal y la contraseña que proporcionen.

Espero que eso lo explique, si no es así y sientes que el primer enlace no te ayuda a entender, no dudes en hacérmelo saber :D

Respondido 17 Abr '13, 16:04

Completamente de acuerdo contigo en eso, lo menciono en el primer enlace. Sin embargo, también agregaré eso a la respuesta :) - sam jenkins

Bueno, podrías hacer que el programa tenga su propio código de encriptación. Por ejemplo, haz que cambie todas las 'a' por "kra/".

Pero como alguien mencionó anteriormente, esto no es realmente seguro. Pero dependiendo de su uso, puede que no tenga que serlo.

Respondido 16 Abr '13, 08:04

No sugiera cosas como esta, el cifrado y el hash dentro de .NET son probablemente más fáciles de hacer que crear su propio método de sustitución y son mucho más seguros. - sam jenkins

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.