Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: evicar en 1 Diciembre 2010, 04:51 am



Título: Login Form WinForm c#
Publicado por: evicar en 1 Diciembre 2010, 04:51 am
Estimados estoy tratando de buscar como generar un login form para mi proyecto winform... e googleado bastante  e encontrado esto:
http://ltuttini.blogspot.com/2010/05/login-usando-password-con-hash.html


me paresio bastante interesante.. pero al momento de llevarlo a mi aplicacio tengo probblemas con UsuarioEntity:
genere una clase llamada :

Código
  1. class LoginService
  2.    {
  3.  
  4.        public static bool Autenticar(string usuario, string password)
  5.        {
  6.            string sql = @"SELECT COUNT(*)
  7.                      FROM Usuarios
  8.                      WHERE NombreLogin = @nombre AND Password = @password";
  9.  
  10.  
  11.            using (SqlConnection conn = new SqlConnection("Data Source=ENZZO-PC\\SQLEXPRESS;Initial Catalog=ISW;Integrated Security=True"))
  12.            {
  13.                conn.Open();
  14.  
  15.                SqlCommand command = new SqlCommand(sql, conn);
  16.                command.Parameters.AddWithValue("@nombre", usuario);
  17.  
  18.                string hash = Helper.EncodePassword(string.Concat(usuario, password));
  19.                command.Parameters.AddWithValue("@password", hash);
  20.  
  21.                int count = Convert.ToInt32(command.ExecuteScalar());
  22.  
  23.                if (count == 0)
  24.                    return false;
  25.                else
  26.                    return true;
  27.  
  28.            }
  29.        }
  30.  
  31.  
  32.        public static UsuarioEntity Insert(string nombre, string apellido, string nombreLogin, string password)
  33.        {
  34.            UsuarioEntity usuario = new UsuarioEntity();
  35.  
  36.            usuario.Nombre = nombre;
  37.            usuario.Apellido = apellido;
  38.            usuario.NombreLogin = nombreLogin;
  39.            usuario.Password = password;
  40.  
  41.            return Insert(usuario);
  42.        }
  43.  
  44.        public static UsuarioEntity Insert(UsuarioEntity usuario)
  45.        {
  46.  
  47.            string sql = @"INSERT INTO Usuarios (
  48.                           Nombre
  49.                          ,Apellido
  50.                          ,NombreLogin
  51.                          ,Password)
  52.                      VALUES (
  53.                            @Nombre,
  54.                            @Apellido,
  55.                            @NombreLogin,
  56.                            @Password)
  57.                    SELECT SCOPE_IDENTITY()";
  58.  
  59.  
  60.            using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
  61.            {
  62.  
  63.                SqlCommand command = new SqlCommand(sql, conn);
  64.                command.Parameters.AddWithValue("Nombre", usuario.Nombre);
  65.                command.Parameters.AddWithValue("Apellido", usuario.Apellido);
  66.                command.Parameters.AddWithValue("NombreLogin", usuario.NombreLogin);
  67.  
  68.                string password = Helper.EncodePassword(string.Concat(usuario.NombreLogin, usuario.Password));
  69.                command.Parameters.AddWithValue("Password", password);
  70.  
  71.                conn.Open();
  72.  
  73.                usuario.Id = Convert.ToInt32(command.ExecuteScalar());
  74.  
  75.                return usuario;
  76.            }
  77.        }
  78.  
  79.  
  80.        internal class Helper
  81.        {
  82.            public static string EncodePassword(string originalPassword)
  83.            {
  84.                MD5 md5 = MD5.Create();
  85.                byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(originalPassword);
  86.                byte[] hash = md5.ComputeHash(inputBytes);
  87.  
  88.                return BitConverter.ToString(hash).Replace("-", "");
  89.            }
  90.        }
  91.  
  92.  
  93.    }


Título: Re: Login Form WinForm c#
Publicado por: .::IT::. en 1 Diciembre 2010, 05:10 am
Bueno te falda definir la clase UsuarioEntity. que segun:
Código:
public static UsuarioEntity Insert(UsuarioEntity usuario)

deberia ser :

Código:
Public Class UsuarioEntity
{
       string Nombre {get;set;}
       Apellido {get;set;}
       NombreLogin {get;set;}
       Password {get;set;}
}

Claro que tambien podrias hacerlo declarando variable privadas para cada propiedad.


Título: Re: Login Form WinForm c#
Publicado por: evicar en 1 Diciembre 2010, 05:35 am
GRACIAS !!! SOLUCIONADO

Cerrar


Título: Re: Login Form WinForm c#
Publicado por: .::IT::. en 1 Diciembre 2010, 15:34 pm
GRACIAS !!! SOLUCIONADO

Cerrar

OK evicar, como recomendación para la seguridad de tu sistema deberías migrar ah Web Services y no conectarte a la base de datos directamente ya que la seguridad esta comprometida de manera irremediable(ya que la contraseña de conexión se encuentra en el programa cliente y .net es fácilmente descompilado), para incrementar un poco mas la seguridad usa el “dotfuscator community edition” y aun así estas vulnerable.

Nota: Si estoy equivocado pro favor corregirme.

Saludos!!!!!!


Título: Re: Login Form WinForm c#
Publicado por: Siuto en 1 Diciembre 2010, 18:04 pm
Lindo code, andaba buscando algo asi, pero me surge una duda.

Abriendo la SqlConnection dentro del using() en caso de que se produsca SqlException no se va a cerrar la conexión o si?


Comentario offtopic, esto es feo:

Código:
if (count == 0) return false;
else return true;

porque no hacer:

Código:
return count != 0;


Título: Re: Login Form WinForm c#
Publicado por: [D4N93R] en 3 Diciembre 2010, 06:48 am
Siuto xD, me agarraste fuera de base,

No me acuerdo si cierra la conexión si hay un exception dentro del using cuando usas SqlConnection.. Uhmmmm,, lo peor es que no tengo tiempo para probar.

Si tienes un rato libre inténtalo y me cuentas :) Sino, intentaré probarlo el fin de semana.

Es que ando demasiado full, son las 12 de la noche y ahora es que tengo tiempo para revisar el foro :(

Un saludo!