public static string crearLogin(string nombre, string contrasena) { //Llamamos a la clase 'Leer' para leer el archivo string respuestaArchivo = Leer.LeerUsuario(nombre); if (respuestaArchivo == "noEncontrado") { //declaramos el salt en byte byte[] salt; //Creamos un salt aleatorio new RNGCryptoServiceProvider().GetBytes(salt = new byte[16]); //Llamamos a la clase de calcular hash con la contraseña y el salt string hash = ClassCalcularHashConPassYSalt.CrearHash(contrasena, salt); //Comprovamos si el se ha producido algun error en la clase de crear el hash para poder mostrarlo en el form if (hash == "problemaHash") { return(hash); } else { //Aqui usamos la constante Inicializada en el Form1 para escribir //en el usuarios.txt el nombre, el salt(convertida a String) y el hash del password using (System.IO.StreamWriter file = new System.IO.StreamWriter(Form1.archivoUsuarios, true)) { file.WriteLine(nombre + ',' + Convert.ToBase64String(salt) + ',' + hash); } return("creado"); } } //Devolvemos que a habido un problema al leer el archivo else if (respuestaArchivo == null) { return(null); } //Devolvemos un texto diciendo que el usuario indicado ya existe else { return("existe"); } }
public static string autentificar(string nombre, string contrasena) { //Creamos una array donde guardaremos la linea de cada usuario del archivo string[] usuario; //Creamos una array de tipo byte donde guardaremos el salt del archivo //Hay que declararlo array porque sino da error byte[] saltLeido; //Llamamos a la clase 'Leer' para leer el archivo string respuestaArchivo = Leer.LeerUsuario(nombre); //Hacemos un if para ver si se a encontrado el usuario if (respuestaArchivo == "noEncontrado") { return("noEncontrado"); } else { //Si se ha encontrado al usuario guardamos los tres datos en el array separado por las ',' usuario = respuestaArchivo.Split(','); //Convertimos el salt de byte a string saltLeido = Convert.FromBase64String(usuario[1]); //Calculamos el hash con el salt del archivo mas el la contraseña introducido por el usuario string hash = ClassCalcularHashConPassYSalt.CrearHash(contrasena, saltLeido); //Los comparamos para ver si coinciden con el registrado if (hash == usuario[2]) { return("usuarioAutentificado"); } else { return("contraNoCoincide"); } } }