28/08/2010

[.NET] Authentification, MD5 d'un string

Pour raisons évidentes de sécurité, il n'est pas possible de stocker les mots de passe de nos clients en "clair" dans une base de données.

Voilà comment faire pour stocker les mots de passe avec un Hash MD5.



Partons du principe que cette authentification est basé sur pattern n-tiers (DAL, Business, IHM) et que la table et la DAL ont déjà été créé.

Vous commencez par créer votre classe de gestion du Hash dans Business:

using System.Security.Cryptography;

public class MD5CryptGest
{
   public string Get_A_MD5_Hash_from_String (string text)
   {
      //Instanciation d'un d'un service de Hash MD5;
      MD5 svc = new MD5CryptoServiceProvider ();

      //Convertion de la chaîne de caractères en Bytes
      UnicodeEncoding encode = new UnicodeEncoding();
      bytes[] buffer = encode.GetBytes(text);

      //Création du Hash en Bytes puis convertionen String
      bytes[] hash = svc.ComputeHash(buffer);
      string result = Convert.ToBase64String(hash);
      
      return result;

   }
}

Ensuite toujours dans Business, vous créer votre gestion de l'authentification avec un requête Linq (N'oubliez pas de rajouter la référence System.Data.Entity):

using DAL;

public class Authentification
{
   //Constructeur pour instancier ma connexion
   public Authentification()
   {
      connection = new MaBaseEntities();
   }
 
   private MaBaseEntities connection;

   private string authentification(string ID, string password)
   {
      //Requête LinQ
      MD5CryptGest crrypting = new MD5CryptGest();
      MaTable check =  (from user in connection.MaTable
                        where user.userID.equals(ID)
                        select user).FirstOrDefault();
   }

   //Vérification que les informations correspondent
   try
   {
      if (check.userID == ID && check.password == crypting.Get_A_MD5_Hash_from_String(password))
      {
         return "Access granted";
      }

      else
      {
         return "Access denied";
      }

      catch (Exception)
      {
         return "UserID not found";
      }
   }
}

Pour finir on passe dans le code behind de l'IHM :

private void Button_Click(object sender, RoutedEventArgs e)
{
   Authentification AuthEntity = new Authentification ();
   MessageBox.Show(AuthEntity.authentification(textboxID.text, textboxPassword.text));
}

Voilà voilà, c'est fini !

Le code est certainement perfectible alors correction, pistes de réflexion, encouragements, n'hésitez pas à poster vos commentaires.


04/08/2010

[XAML] Contrôle Ribbon pour WPF

Bonjour à tous,

Fraichement sortie par microsoft, voici un lien où télécharger les contrôles Ribbon pour vos applications WPF/Silverlight.



ici

Une fois le fichier installé, il suffit de cliquer depuis Visual Studio 2010 ou 2008 avec sp1 sur Tools > Choose Toolbox Item... il ne vous reste plus qu'à choisir les controles du Ribbon pour les avoir disponibles dans la Toolbox.



01/08/2010

[Livre] MCTS 70-536 : Application Development Foundation

Voilà le dernier le livre que j'ai lu :
"MCTS 70-536 Self Paced Training Kit: Application Development Foundation" écrit par Tony Northrup





C'est bien évidemment un minimum lorsque l'on souhaite appréhender la technologie .NET avec des bases solides.

Au programme entre autres dans le désordre:

- Input/Output
- Collections
- Sécurité
- Thread
- Sérialisation
- Globalisation
- Mails
- Graphique
- Domaine d'application
- Installer

etc...

Comme je le disais précédemment une bonne base.

Les exemples sont systématiquement donnés en VB.NET & C#.

En revanche, il faut déjà avoir des connaissances en Programmation Orienté Objet.

A mon avis ce livre reste, même si c'est rebutant (+ de 1000 pages), indispensable. Donc http://tinyurl.com/2f4z9rj

Pour info l'exam 70-536 n'est un pré-requis que pour les certifications sur le framework 2.0  et 3.5. Il n'est pas nécessaire pour effectuer les certifications sur le framework 4.0.