Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Security.Cryptography;
- using PlanningActivitiesWP8.Entidades;
- using Microsoft.WindowsAzure.MobileServices;
- namespace PlanningActivitiesWP8
- {
- public class CryptoPass
- {
- #region propiedades o autopropiedades
- #endregion
- #region constructor
- public CryptoPass()
- {
- }
- #endregion
- #region metodos para cifrar datos
- /* GenerateHash es para generar el hash de la clave y necesito el codigo salt
- */
- public static byte[] GenerateHash(string password, byte[] salt)
- {
- byte[] passwordData = Encoding.UTF8.GetBytes(password);
- byte[] composite = new byte[passwordData.Length + 32];
- Array.Copy(passwordData, composite, passwordData.Length);
- Array.Copy(salt, 0, composite, passwordData.Length, salt.Length);
- SHA256 hashFunction = new SHA256Managed();
- byte[] hash = hashFunction.ComputeHash(composite);
- return hash;
- }
- // obtener salt como dice el nombre del metodo que es lo primero que hay que hacer
- public static byte[] GetSalt()
- {
- byte[] rngContainer = new byte[32];
- RNGCryptoServiceProvider rngProvider = new RNGCryptoServiceProvider();
- rngProvider.GetBytes(rngContainer);
- return rngContainer;
- }
- public static byte[] GetSaltFromString(string source)
- {
- string[] raw = source.Split('-');
- byte[] result = new byte[raw.Length];
- for (int i = 0; i < raw.Length; i++)
- {
- result[i] = Convert.ToByte(raw[i], 16);
- }
- return result;
- }
- /* aqui tengo que hacer modificacions en el codigo del metodo para que funcione como es debido
- */
- //aqui definimos el user que vamos a añadir luego con el comando RegisterUser
- public static usuarios GetSecureUserModel(string username, string password, string email = "", byte[] customSalt = null)
- {
- byte[] hash;
- usuarios user = new usuarios();
- user.usuario = username;
- user.email = email;
- if (customSalt == null)
- {
- byte[] salt = GetSalt();
- user.salt = BitConverter.ToString(salt);
- hash = GenerateHash(password, salt);
- }
- else
- {
- hash = GenerateHash(password, customSalt);
- }
- user.hash = BitConverter.ToString(hash);
- user.salt = BitConverter.ToString(customSalt);
- return user;
- }
- public async static Task<bool> RegisterUser(usuarios user)
- {
- IMobileServiceTable<usuarios> userTable = App.MobileService.GetTable<usuarios>();
- List<usuarios> userList = await userTable.Take(1).Where(x => x.usuario == user.usuario).ToListAsync();
- if (userList.Count == 0)
- {
- await App.MobileService.GetTable<usuarios>().InsertAsync(user);
- return true;
- }
- else
- {
- return false;
- }
- }
- //obten4er usuario de la base de datos
- public static async Task<usuarios> GetUserFromDatabase(string username)
- {
- IMobileServiceTable<usuarios> userTable = App.MobileService.GetTable<usuarios>();
- List<usuarios> userList = await userTable.Take(1).Where(x => x.usuario == username).ToListAsync();
- if (userList.Count == 0)
- return null;
- else
- return userList.First();
- }
- public async static Task<usuarios> VerifyLogin(string username, string password)
- {
- usuarios dbUser = await GetUserFromDatabase(username);
- if (dbUser != null)
- {
- usuarios localUser = GetSecureUserModel(username, password, "",
- GetSaltFromString(dbUser.salt));
- if (dbUser.hash == localUser.hash)
- return dbUser;
- }
- return null;
- }
- #endregion
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement