none
Login simple RRS feed

  • Pregunta

  • Hola, mi idea es hacer un Login para un software personal, y por ello me pregunto, la forma mas segura cual es? Base de datos, o dentro del código tener un usuario y contraseña en el código?
    domingo, 19 de junio de 2016 16:38

Respuestas

  • La base de datos se usa si quieres tener varios usuarios y que se puedan añadir, modificar y borrar. Pero si quieres tener solo uno y es fijo, da igual que lo metas directamente en el código. No es menos seguro que la base de datos, ya que al fin y al cabo las credenciales para acceder a la base de datos tendrían que ser accesibles desde el código, así que ya puestos a meter esas credenciales en el código te da lo mismo guardar directamente el usuario y la password, o mejor todavía un hash de la password.
    domingo, 19 de junio de 2016 17:21
    Moderador
  • hola

    quizas esto resulte de guia

    Login – Usando Password con Hash

    >>Base de datos, o dentro del código tener un usuario y contraseña en el código?

    no recomiendo que la autenticacion este fija en el codigo, si la idea es autenticar varios usuario esto debe poder persistirse en un medio separado ya sea una db o algun archivo encriptado

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 21 de junio de 2016 10:38
  • Hola, lo más factible sería que uses una BD con la contraseña cifrada (MD5), te dejo el método utilizadopara encriptar:

    public string Encriptar(string texto)
    {
    //arreglo de bytes donde guardaremos la llave
    byte[] keyArray;
    //arreglo de bytes donde guardaremos el texto
    //que vamos a encriptar
    byte[] Arreglo_a_Cifrar =
    UTF8Encoding.UTF8.GetBytes(texto);
    
    //se utilizan las clases de encriptación
    //provistas por el Framework
    //Algoritmo MD5
    MD5CryptoServiceProvider hashmd5 =
    new MD5CryptoServiceProvider();
    //se guarda la llave para que se le realice
    //hashing
    keyArray = hashmd5.ComputeHash(
    UTF8Encoding.UTF8.GetBytes(key));
    
    hashmd5.Clear();
    
    //Algoritmo 3DAS
    TripleDESCryptoServiceProvider tdes =
    new TripleDESCryptoServiceProvider();
    
    tdes.Key = keyArray;
    tdes.Mode = CipherMode.ECB;
    tdes.Padding = PaddingMode.PKCS7;
    
    //se empieza con la transformación de la cadena
    ICryptoTransform cTransform =
    tdes.CreateEncryptor();
    
    //arreglo de bytes donde se guarda la
    //cadena cifrada
    byte[] ArrayResultado =
    cTransform.TransformFinalBlock(Arreglo_a_Cifrar,
    0, Arreglo_a_Cifrar.Length);
    
    tdes.Clear();
    
    //se regresa el resultado en forma de una cadena
    return Convert.ToBase64String(ArrayResultado,
    0, ArrayResultado.Length);
    }

    y el método para desencriptar:

    public string Desencriptar(string textoEncriptado)
    {
    byte[] keyArray;
    //convierte el texto en una secuencia de bytes
    byte[] Array_a_Descifrar =
    Convert.FromBase64String(textoEncriptado);
    
    //se llama a las clases que tienen los algoritmos
    //de encriptación se le aplica hashing
    //algoritmo MD5
    MD5CryptoServiceProvider hashmd5 =
    new MD5CryptoServiceProvider();
    
    keyArray = hashmd5.ComputeHash(
    UTF8Encoding.UTF8.GetBytes(key));
    
    hashmd5.Clear();
    
    TripleDESCryptoServiceProvider tdes =
    new TripleDESCryptoServiceProvider();
    
    tdes.Key = keyArray;
    tdes.Mode = CipherMode.ECB;
    tdes.Padding = PaddingMode.PKCS7;
    
    ICryptoTransform cTransform =
    tdes.CreateDecryptor();
    
    byte[] resultArray =
    cTransform.TransformFinalBlock(Array_a_Descifrar,
    0, Array_a_Descifrar.Length);
    
    tdes.Clear();
    //se regresa en forma de cadena
    return UTF8Encoding.UTF8.GetString(resultArray);
    }
    

    Cuando creas los usuarios y sus contraseñas, llamas al método encriptar y así guardar en la base de datos la contraseña encriptada, luego para la validación encriptas lo del texto recibido con el mismo método.

    Espero te sirva


    Javier

    lunes, 20 de junio de 2016 2:38

Todas las respuestas

  • La base de datos se usa si quieres tener varios usuarios y que se puedan añadir, modificar y borrar. Pero si quieres tener solo uno y es fijo, da igual que lo metas directamente en el código. No es menos seguro que la base de datos, ya que al fin y al cabo las credenciales para acceder a la base de datos tendrían que ser accesibles desde el código, así que ya puestos a meter esas credenciales en el código te da lo mismo guardar directamente el usuario y la password, o mejor todavía un hash de la password.
    domingo, 19 de junio de 2016 17:21
    Moderador
  • Todo depende del nivel de seguridad que tengas implementado.

    Como bien te han explicado, si almacenas en una BBDD user y pass es para varios usuarios y demás, pero tocante a seguridad dependerá dónde está ubicada esa base de datos, es decir, si la tienes en local y el acceso a ellas es pública y sin contraseña para acceder a los datos pues.... más si usas el almacenamiento en BBDD y almacenas las password en texto plano, volveríamos a lo mismo.

    Si la pones en el código, ya sabes que no podrás hacer ninguna modificación con esos datos.

    Así que la elección es tuya, aunque yo te recomendaría BBDD con las password hasheadas y/o cifradas mediante alguna función.

    Espero haberte aclarado algo más tus dudas.

    Un saludo.

    Jesús D. Angosto

    PD: si te valió la respuesta, márcala como respuesta propuesta y vótame :)

    lunes, 20 de junio de 2016 0:16
  • Hola, lo más factible sería que uses una BD con la contraseña cifrada (MD5), te dejo el método utilizadopara encriptar:

    public string Encriptar(string texto)
    {
    //arreglo de bytes donde guardaremos la llave
    byte[] keyArray;
    //arreglo de bytes donde guardaremos el texto
    //que vamos a encriptar
    byte[] Arreglo_a_Cifrar =
    UTF8Encoding.UTF8.GetBytes(texto);
    
    //se utilizan las clases de encriptación
    //provistas por el Framework
    //Algoritmo MD5
    MD5CryptoServiceProvider hashmd5 =
    new MD5CryptoServiceProvider();
    //se guarda la llave para que se le realice
    //hashing
    keyArray = hashmd5.ComputeHash(
    UTF8Encoding.UTF8.GetBytes(key));
    
    hashmd5.Clear();
    
    //Algoritmo 3DAS
    TripleDESCryptoServiceProvider tdes =
    new TripleDESCryptoServiceProvider();
    
    tdes.Key = keyArray;
    tdes.Mode = CipherMode.ECB;
    tdes.Padding = PaddingMode.PKCS7;
    
    //se empieza con la transformación de la cadena
    ICryptoTransform cTransform =
    tdes.CreateEncryptor();
    
    //arreglo de bytes donde se guarda la
    //cadena cifrada
    byte[] ArrayResultado =
    cTransform.TransformFinalBlock(Arreglo_a_Cifrar,
    0, Arreglo_a_Cifrar.Length);
    
    tdes.Clear();
    
    //se regresa el resultado en forma de una cadena
    return Convert.ToBase64String(ArrayResultado,
    0, ArrayResultado.Length);
    }

    y el método para desencriptar:

    public string Desencriptar(string textoEncriptado)
    {
    byte[] keyArray;
    //convierte el texto en una secuencia de bytes
    byte[] Array_a_Descifrar =
    Convert.FromBase64String(textoEncriptado);
    
    //se llama a las clases que tienen los algoritmos
    //de encriptación se le aplica hashing
    //algoritmo MD5
    MD5CryptoServiceProvider hashmd5 =
    new MD5CryptoServiceProvider();
    
    keyArray = hashmd5.ComputeHash(
    UTF8Encoding.UTF8.GetBytes(key));
    
    hashmd5.Clear();
    
    TripleDESCryptoServiceProvider tdes =
    new TripleDESCryptoServiceProvider();
    
    tdes.Key = keyArray;
    tdes.Mode = CipherMode.ECB;
    tdes.Padding = PaddingMode.PKCS7;
    
    ICryptoTransform cTransform =
    tdes.CreateDecryptor();
    
    byte[] resultArray =
    cTransform.TransformFinalBlock(Array_a_Descifrar,
    0, Array_a_Descifrar.Length);
    
    tdes.Clear();
    //se regresa en forma de cadena
    return UTF8Encoding.UTF8.GetString(resultArray);
    }
    

    Cuando creas los usuarios y sus contraseñas, llamas al método encriptar y así guardar en la base de datos la contraseña encriptada, luego para la validación encriptas lo del texto recibido con el mismo método.

    Espero te sirva


    Javier

    lunes, 20 de junio de 2016 2:38
  • hola

    quizas esto resulte de guia

    Login – Usando Password con Hash

    >>Base de datos, o dentro del código tener un usuario y contraseña en el código?

    no recomiendo que la autenticacion este fija en el codigo, si la idea es autenticar varios usuario esto debe poder persistirse en un medio separado ya sea una db o algun archivo encriptado

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 21 de junio de 2016 10:38