Test Foro de elhacker.net SMF 2.1

Programación => Programación General => .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 (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.

(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 (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.
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