mercredi 20 novembre 2013

Cryptage et décryptage des mots de passe avancé 1

Il n'existe pas de solution définitive et universelle, tout évolue. Avant qu'on océan remplisse des grandes surfaces de terre, la première goute d'eau est importante.

Dans le précédent billet, nous avons abordé la notion de cryptage d'une maniere trop simple. Ce cryptage consiste juste à convertir une chaine de caractère en Base64String ce qui constitue un danger pour un système, un hackeur bien éveillé s'il acceder àla base des données, il peux simplement convertir le Base64String en string et directement il a le mot de passe. Cette methode ne doit pas vraiment être appellé cryptage mais une solution rapide pour proteger le mot de passe. Le vrai crytage consiste à avoir un algorithme de crytage qui vas servir pour cryter et décrypter le mot de passe. Il est difficile à un hacker de savoir l'algorythme de crypage car il ne l'a pas, bien sur ca peu lui prendre énormement du temps  ( meme 6 mois) pour etre en mesure de décrypter : rien n'est impossible en informatique c'est le temps qui crée les limites.





Dans cette demarche nous allons créer une classe qui contiendra l'algorithme de cryptage , ensuite nous allons appeller la classe dans la page souhaitée afin de crypter ou décrypter le mot de passe.


1. Classe  EncryptionPasswd



 public class EncryptionPasswd
    {
        public static byte[] Key = { 69, 75, 101, 56, 255, 46, 182, 135, 193, 155, 221, 154, 53, 178, 68, 56, 42, 11, 135, 145, 185, 28, 78, 49, 97, 168, 84, 117, 225, 130, 145, 65 };
        public static byte[] IV = { 54, 36, 255, 23, 165, 153, 88, 248, 175, 184, 198, 241, 175, 67, 69, 65 };

        //Cryptage
        public static string DecryptString(string src)
        {
            string strReturn = "";
            MemoryStream ms = null;
            CryptoStream cs = null;
            byte[] p = Convert.FromBase64String(src);
            byte[] initialText = new Byte[p.Length];
            int intIndex = 0;
            bool IsEndOfString = false;
            RijndaelManaged rv = new RijndaelManaged();
            ms = new MemoryStream(p);
            cs = new CryptoStream(ms, rv.CreateDecryptor(EncryptionPasswd.Key, EncryptionPasswd.IV), CryptoStreamMode.Read);
            cs.Read(initialText, 0, initialText.Length);
            while ((intIndex < initialText.Length) && !IsEndOfString)
            {
                if (initialText[intIndex] != 0)
                    strReturn += ((char)initialText[intIndex]);
                else
                    IsEndOfString = true;
                intIndex++;
            }

            return Convert.ToString(strReturn);

        }

        //Decryptage
        public static string EncryptString(string src)
        {
            byte[] p = Encoding.ASCII.GetBytes(src.ToCharArray());
            byte[] encodedBytes = { };

            MemoryStream ms = new MemoryStream();
            RijndaelManaged rv = new RijndaelManaged();
            CryptoStream cs = new CryptoStream(ms, rv.CreateEncryptor(EncryptionPasswd.Key, EncryptionPasswd.IV), CryptoStreamMode.Write);
            cs.Write(p, 0, p.Length);
            cs.FlushFinalBlock();
            encodedBytes = ms.ToArray();
            return Convert.ToBase64String(encodedBytes);
        }

    }


Vraiment, il faut beaucoup de temps, d’ingéniosité, un mental de résistant pour décrypter cet algorithme, il n'est pas si extra mais un peu costaud.


2. Pour crypter ou décrypter, il suffit d’appeler la classe  et le tour est joué, dans mon cas j'ai utilisé:
 




 protected void DisplayEncrypt(object sender, EventArgs e)
        {
            EncryptData.Text = EncryptionPasswd.EncryptString(Password.Text);
        }

        protected void DisplayDecrypt(object sender, EventArgs e)
        {
            EncryptData.Text = EncryptionPasswd.DecryptString(Password.Text);
        }



If any comment, please contact me at : monsar04[at]gmail.com

Merci :)







Aucun commentaire:

Enregistrer un commentaire