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:
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.
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
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.
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.
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.
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
Lo se que está en plano. Pero primero debo hacer funcionar bien el programa antes de meterme en la cifrado.
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
el mismo mysql o el sql server ya tienen fucniones para cifrar contraseñas a travez de una clave dada ,podes probar eso.
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.
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
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.
Lee algo de ADO.net