Varios modos de poner contraseñas

Iniciado por Meta, 16 Noviembre 2009, 18:16 PM

0 Miembros y 1 Visitante están viendo este tema.

Meta

Hola:

Ahora aprovecho usar el Visual C# Express 2010 beta 2 para hacer pruebas de todo tipo, entre ellas aprender.

Se trata de introducir en el formulario Form1, un button1 y un textbox1. En el lograr que al introducir la contraseña correcta muestra un mensaje contraseña CORRECTA o INCORRECTA.

Por ahora solo he hecho esto y funciona:

Código (csharp) [Seleccionar]

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Contraseña01
{
   public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
       }

       private void button1_Click(object sender, EventArgs e)
       {
           if (textBox1.Text == "1234")
           {
               MessageBox.Show("Contraseña CORRECTA", "Aviso:");
           }
           else
           {
               MessageBox.Show("Contraseña INCORRECTA", "Aviso:");
           }
       }
   }
}


Está claro si uno se para a pensar que la contraseña guardada no está guardada realmente, sino dentro del programa ya compilado (que hay métodos para descompilar y todo). Lo ideal es crear una forma que se pueda guardar la contraseña en algún lado (por ahora sin cifrar) para recuperarla y compararla.

Se que hay varios tipos de formas de guardar, de .txt, xml y demás. Me gustaría saber cual es la mejor forma. Más adelante ya nos meteremos formas de encriptarla.



Sólo necesito ayuda de cómo hacer y cuál es el método recomendable para guardar la contraseña y que la pueda cambiar.

Saludo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker

#1
Puedes hacer uso de algún algoritmo de cifrado de un solo sentido, como SHA-1 por citar un ejemplo :P

:http://msdn.microsoft.com/es-es/library/system.security.cryptography.sha1%28VS.80%29.aspx

Pondrías la contraseña cifrada, ej: e04fd22963b74df3692cc3ed99c10bf81e5d2534, y luego en la verificación, recibes el valor "Contraseña" y lo encriptas, y si es igual al hash almacenado, entonces esta ok :P

Saludos

P.D: he puesto sha-1 porque era el conversor que tenía a mano XD
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Meta

Gracias.

Por lo que veo, mejor usar una base de datos.

Descargar:
MySQL 5.1.40
Connector .net

Ver manual página 437 sobre Visual C# y MySQL.

Luego pongo avances que he hecho con imágnes paso a paso.


Saludo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Meta

He hecho esto. Agruegué un button nuevo llamado button_crear_db, para que se cree la base de datos y tabla con un valor vacío.

Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using MySql.Data.MySqlClient; // No olvidar aquí.
using MySql.Data.Types;

namespace Contraseña01
{
   public partial class Form1 : Form
   {
       MySqlConnection connection = null; // No olvidar.
       string MyConString;

       public Form1()
       {
           InitializeComponent();
       }

       private void button1_Click(object sender, EventArgs e)
       {
           if (textBox1.Text == "1234")
           {
               
               MessageBox.Show("Contraseña CORRECTA", "Aviso:",
                   MessageBoxButtons.OK, MessageBoxIcon.Information);
           }
           else
           {
               MessageBox.Show("Contraseña INCORRECTA", "Aviso:",
                   MessageBoxButtons.OK, MessageBoxIcon.Stop);
           }
       }


        // Con este botón se crea l base de datos y tabla para la contraseña.
       private void button_crear_db_Click(object sender, EventArgs e)
       {
           string MyConString = "SERVER=127.0.0.1;" +
                   "PORT=3306;" +
                   "UID=root;" +
                   "PASSWORD=1234;";
           string tabla = @"CREATE TABLE `guardar` (
                           `password` varchar(20) NOT NULL,
                           PRIMARY KEY (`password`)
                           ) ENGINE=InnoDB DEFAULT CHARSET=latin1;";

           connection = new MySqlConnection(MyConString);
           connection.Open();

           MySqlCommand con = new MySqlCommand(tabla, connection);
           con.ExecuteNonQuery();
       }
   }
}



¿Cómo comparo la contraseña y que me diga CORRECTO o INCORRECTO?

Salu2.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker

AAAAAAAhhh!, pero ahí la contraseña sigue estando en texto plano, en una bbdd pero en texto plano, pensé que ibas a utilizar una tabla con user/password (cifrado).
¿Cual es la ventaja de hacer eso? ¿No hay ningún problema? Estas en la misma pero con un archivo de unos 2Mb adicionales  :silbar:

Citar¿Cómo comparo la contraseña y que me diga CORRECTO o INCORRECTO?
Consultas la tabla y comparas contra valor, aunque como digo .. sigues en la misma  :xD
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Meta

Lo se que está en plano. Pero primero debo hacer funcionar bien el programa antes de meterme en la cifrado.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker

ok .. pero vas a manejar muchas contraseñas? porque sino no tiene sentido tener una bbdd para una o unas pocas.

Y para leer eso ... sqldatareader

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

seba123neo

el mismo mysql o el sql server ya tienen fucniones para cifrar contraseñas a travez de una clave dada ,podes probar eso.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

KJD

Perdon que reviva un post medio viejo, pero mas alla de que la contaseña este cifrada o no, que SHA1, MD5 y cualquier otro algoritmo, todo se resume a el salto que te dice contraseña Buena // Mala. Si ya se que me van a decir, si la contraseña esta cifrada no podran tener el programa full, si lo se, pero el problema es que al poder decompilarce, poeds modificar el programa como si fuese tuyo.

Saludos.
"Solo hay 10 tipos personas que saben leer binario, los que si y los que no"

"Keyboard not Found, press F1 To Continue" WTF???

MANULOMM

si aun asi se decompilara no obtendrias nunca la contraseña, si no quieres que lo modifiquen o por lo menos que no sea sencillo entonces Ofusca el codigo; es mas en el "mundo real" cuantos programas has decompilado tu para modificarlos y saltarte la seguridad?... es posible decompilarlo con el reflection (aunque sufre variaciones en codigo) es una tarea muy ardua copiar clase por clase y estudirse el programa para generar un nuevo exe.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia