Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Meta en 16 Noviembre 2009, 18:16 pm



Título: Varios modos de poner contraseñas
Publicado por: Meta en 16 Noviembre 2009, 18:16 pm
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
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9.  
  10. namespace Contraseña01
  11. {
  12.    public partial class Form1 : Form
  13.    {
  14.        public Form1()
  15.        {
  16.            InitializeComponent();
  17.        }
  18.  
  19.        private void button1_Click(object sender, EventArgs e)
  20.        {
  21.            if (textBox1.Text == "1234")
  22.            {
  23.                MessageBox.Show("Contraseña CORRECTA", "Aviso:");
  24.            }
  25.            else
  26.            {
  27.                MessageBox.Show("Contraseña INCORRECTA", "Aviso:");
  28.            }
  29.        }
  30.    }
  31. }
  32.  

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.

(http://imagenes.portalxd.com/images/pass.gif)

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.


Título: Re: Varios modos de poner contraseñas
Publicado por: Novlucker en 16 Noviembre 2009, 18:42 pm
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


Título: Re: Varios modos de poner contraseñas
Publicado por: Meta en 16 Noviembre 2009, 19:15 pm
Gracias.

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

Descargar:
MySQL 5.1.40 (http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.40-win32.msi/from/ftp://ftp.rediris.es/mirror/mysql/)
Connector .net (http://dev.mysql.com/get/Downloads/Connector-Net/mysql-connector-net-6.1.3-src.zip/from/ftp://ftp.rediris.es/mirror/mysql/)

Ver manual (http://www.abcdatos.com/webmasters/tutorial/v310.html) página 437 sobre Visual C# y MySQL.

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


Saludo.


Título: Re: Varios modos de poner contraseñas
Publicado por: Meta en 16 Noviembre 2009, 23:29 pm
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
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9.  
  10. using MySql.Data.MySqlClient; // No olvidar aquí.
  11. using MySql.Data.Types;
  12.  
  13. namespace Contraseña01
  14. {
  15.    public partial class Form1 : Form
  16.    {
  17.        MySqlConnection connection = null; // No olvidar.
  18.        string MyConString;
  19.  
  20.        public Form1()
  21.        {
  22.            InitializeComponent();
  23.        }
  24.  
  25.        private void button1_Click(object sender, EventArgs e)
  26.        {
  27.            if (textBox1.Text == "1234")
  28.            {
  29.  
  30.                MessageBox.Show("Contraseña CORRECTA", "Aviso:",
  31.                    MessageBoxButtons.OK, MessageBoxIcon.Information);
  32.            }
  33.            else
  34.            {
  35.                MessageBox.Show("Contraseña INCORRECTA", "Aviso:",
  36.                    MessageBoxButtons.OK, MessageBoxIcon.Stop);
  37.            }
  38.        }
  39.  
  40.  
  41.        // Con este botón se crea l base de datos y tabla para la contraseña.
  42.        private void button_crear_db_Click(object sender, EventArgs e)
  43.        {
  44.            string MyConString = "SERVER=127.0.0.1;" +
  45.                    "PORT=3306;" +
  46.                    "UID=root;" +
  47.                    "PASSWORD=1234;";
  48.            string tabla = @"CREATE TABLE `guardar` (
  49.                            `password` varchar(20) NOT NULL,
  50.                            PRIMARY KEY (`password`)
  51.                            ) ENGINE=InnoDB DEFAULT CHARSET=latin1;";
  52.  
  53.            connection = new MySqlConnection(MyConString);
  54.            connection.Open();
  55.  
  56.            MySqlCommand con = new MySqlCommand(tabla, connection);
  57.            con.ExecuteNonQuery();
  58.        }
  59.    }
  60. }


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

Salu2.


Título: Re: Varios modos de poner contraseñas
Publicado por: Novlucker en 17 Noviembre 2009, 01:41 am
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


Título: Re: Varios modos de poner contraseñas
Publicado por: Meta en 17 Noviembre 2009, 01:43 am
Lo se que está en plano. Pero primero debo hacer funcionar bien el programa antes de meterme en la cifrado.


Título: Re: Varios modos de poner contraseñas
Publicado por: Novlucker en 17 Noviembre 2009, 01:50 am
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


Título: Re: Varios modos de poner contraseñas
Publicado por: seba123neo en 17 Noviembre 2009, 02:32 am
el mismo mysql o el sql server ya tienen fucniones para cifrar contraseñas a travez de una clave dada ,podes probar eso.


Título: Re: Varios modos de poner contraseñas
Publicado por: KJD en 24 Noviembre 2009, 13:32 pm
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.


Título: Re: Varios modos de poner contraseñas
Publicado por: MANULOMM en 24 Noviembre 2009, 13:41 pm
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


Título: Re: Varios modos de poner contraseñas
Publicado por: KJD en 25 Noviembre 2009, 01:25 am
Mas bien que ninguno jajaja pero me referia a poder modificarlo a gusto, creeme lo he echo varias veces, sin contar que puedes extraer toda la rutina de generacion de serial y demas. Eso es lo unico malo que veo en C# (fundamentalistas de C/C++ abstenerce). SOlo queria dejar eso en claro para los uqe leen el post y tengan en cuenta esto tambien.


Título: Re: Varios modos de poner contraseñas
Publicado por: Skeletron en 26 Noviembre 2009, 00:35 am
Lee algo de ADO.net