Cryptage simple
On a toujours besoin a un moment ou a un autre de crypter des valeurs dans nos application (par exemple dans le fichier de configuration).
En général, je fais comme tout le monde, j'ouvre Google et lance une recherche, le petit souci c'est que de temps en temps (comme cette fois) je prends un code un peu vérollé. Pour une fois, j'ai donc décider de taper quelques lignes de code a la main pour effectuer le cryptage/décryptage d'un string dans un string :)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Security.Cryptography; using System.Configuration;
namespace Technical.Utils { public static class Crypto { public static string Encrypt (string clearText, string password, bool useHashing) { byte[] key; byte[] dataToEncrypt = UTF8Encoding.UTF8.GetBytes(clearText);
if (useHashing || password.Length < 16) { MD5CryptoServiceProvider hashmd5 = null; try { hashmd5 = new MD5CryptoServiceProvider(); key = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(password)); } finally { hashmd5.Clear(); } } else { key = UTF8Encoding.UTF8.GetBytes(password.Substring(0,16)); } TripleDESCryptoServiceProvider tdes = null; try { tdes = new TripleDESCryptoServiceProvider(); tdes.Key = key; tdes.Mode = CipherMode.ECB; tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateEncryptor(); byte[] result = cTransform.TransformFinalBlock(dataToEncrypt, 0, dataToEncrypt.Length); return Convert.ToBase64String(result, 0, result.Length); } finally { tdes.Clear(); } } public static string Encrypt (string clearText, bool useHashing) { string pwd = ConfigurationManager.AppSettings["SecurityKey"]; return Encrypt (clearText, pwd, useHashing); }
public static string Decrypt (string encryptedText, string password, bool useHashing) { byte[] key; byte[] dataToDecrypt = Convert.FromBase64String(encryptedText);
if (useHashing || password.Length < 16) { MD5CryptoServiceProvider hashmd5 = null; try { hashmd5 = new MD5CryptoServiceProvider(); key = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(password)); } finally { hashmd5.Clear(); } } else { key = UTF8Encoding.UTF8.GetBytes(password.Substring(0,16)); }
TripleDESCryptoServiceProvider tdes = null; try { tdes = new TripleDESCryptoServiceProvider(); tdes.Key = key; tdes.Mode = CipherMode.ECB; tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateDecryptor(); byte[] result = cTransform.TransformFinalBlock(dataToDecrypt, 0, dataToDecrypt.Length); return UTF8Encoding.UTF8.GetString(result); } finally { tdes.Clear(); } }
public static string Decrypt (string encryptedText, bool useHashing) { string pwd = ConfigurationManager.AppSettings["SecurityKey"]; return Decrypt(encryptedText, pwd, useHashing); } } }
|
Voila rien de trés compliqué mais ca sert toujours :)
Vous trouverez en attachement un petit tools tout bète vous permettant de crypter/décrypter une chaîne vite fait
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :