Notre question c'est comment crypter une chaine de caractère avec l'algorithme MD5?
Pour commencer on doit savoir :
Cryptage MD5:
MD5 (Message Digest 5) est une fonction de hachage cryptographique qui calcule, à partir d'un fichier numérique, son empreinte numérique avec une probabilité très forte que deux fichiers différents donnent deux empreintes différentes.
En 2004, une équipe chinoise découvre des collisions complètes. MD5 n'est donc plus considéré comme sûr au sens cryptographique. On suggère maintenant d'utiliser plutôt des algorithmes tels que SHA-256, RIPEMD-160 ou Whirlpool.
Cependant, la fonction MD5 reste encore largement utilisée comme outil de vérification lors des téléchargements et l'utilisateur peut valider l'intégrité de la version téléchargée grâce à l'empreinte.
MD5 peut aussi être utilisé pour calculer l'empreinte d'un mot de passe ; c'est le système employé dans GNU/Linux avec la présence d'un sel compliquant le décryptage. Ainsi, plutôt que de stocker les mots de passe dans un fichier, ce sont leurs empreintes MD5 qui sont enregistrées, de sorte que quelqu'un qui lirait ce fichier ne pourra pas découvrir les mots de passe.
Exemple de script en C#
Pour commencer, on doit faire recours à L'espace de noms System.Security.Cryptography qui fournit des services de chiffrement, comprenant le codage et le décodage sécurisé des données, ainsi que beaucoup d'autres opérations, telles que le hachage, la génération aléatoire de nombres et l'authentification de messages.
Fonction de cryptage en C# .Net
Cette fonction permet de crypter une chaine de caractère en utilisant un Key de cryptage et nous retourne la chaine crypter au format Base64
public string Md5Encrypt(string original, string password)
{
MD5CryptoServiceProvider hashMd5 = new MD5CryptoServiceProvider();
byte[] passwordHash = hashMd5.ComputeHash(
Encoding.Default.GetBytes(password));
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Key = passwordHash;
des.Mode = CipherMode.ECB;
byte[] buffer = Encoding.Default.GetBytes(original);
return Convert.ToBase64String(des.CreateEncryptor().TransformFinalBlock(buffer, 0, buffer.Length));
}
Fonction de décryptage en C# .Net
Cette fonction permet de décrypter une chaine de caractère (au format Base64) en utilisant le même Key de cryptageet nous retourne la chaine réelle décrypté.
public string Md5Decrypt(string encrypted, string password)
{
encrypted = Encoding.Default.GetString(Convert.FromBase64String(encrypted));
MD5CryptoServiceProvider hashMd5 = new MD5CryptoServiceProvider();
byte[] passwordHash = hashMd5.ComputeHash(Encoding.Default.GetBytes(password));
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Key = passwordHash;
des.Mode = CipherMode.ECB;
byte[] buffer = Encoding.Default.GetBytes(encrypted);
return Encoding.Default.GetString(des.CreateDecryptor().TransformFinalBlock(buffer, 0, buffer.Length));
}
Donc vous pouvez utiliser ces deux fonctions dans vos scripts C# (exemple pour crypter les mots de passes)