04.06.2016 Views

C 4 Developpez des applications windows avec visual studio 2010

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Introduction à la cryptographie<br />

Les données sensibles doivent être sécurisées de manière à ce que seuls les utilisateurs autorisés puissent les<br />

consulter. L’encryptage est une manière de sécuriser les informations. Il existe <strong>des</strong> algorithmes de cryptage<br />

symétriques et d’autres, asymétriques. Un algorithme de cryptage symétrique utilise la même clé pour l’encryptage et<br />

pour le décryptage tandis qu’un algorithme de cryptage asymétrique utilisera <strong>des</strong> clés différentes pour l’encryptage et<br />

pour le décryptage : une clé publique et une clé privée. Des données peuvent ainsi être encryptées <strong>avec</strong> la clé privée<br />

et décryptées <strong>avec</strong> la clé publique ou inversement mais jamais <strong>avec</strong> la même clé. Le Framework .NET contient de<br />

nombreuses classes permettant de faire de la cryptographie. Elles sont exposées dans l’espace de noms<br />

System.Security.Cryptography. Le hachage est une autre technique de cryptographie mais son but n’est pas de<br />

sécuriser les données mais de garantir leur intégrité. Les algorithmes de hachage ont pour but de créer une valeur de<br />

longueur fixe à partir d’une source de longueur variable. Ces algorithmes sont utilisés pour les signatures numériques<br />

et pour vérifier l’intégrité <strong>des</strong> données. Une donnée passée dans un algorithme de hachage donnera toujours le même<br />

résultat.<br />

L’enregistrement <strong>des</strong> projets de l’application SelfMailer se fait au format XML. Le mot de passe du compte email est<br />

donc humainement lisible. Nous allons voir comment mettre en œuvre l’encryptage et le décryptage de cette propriété.<br />

Créez une nouvelle classe statique Cryptor dans le dossier Library du projet :<br />

public static class Cryptor<br />

{<br />

}<br />

La classe DESCryptoServiceProvider sera utilisée. Cette méthode d’encryptage est considérée comme non sécurisée<br />

car la clé peut être cassée en moins de 24 heures mais ce sera suffisant pour exposer le principe de la cryptographie.<br />

Pour réaliser les opérations d’encryptage et de décryptage, <strong>avec</strong> un objet DESCryptoServiceProvider, vous devez<br />

fournir deux tableaux de type byte d’une longueur de 8 éléments chacun. L’un d’eux sera affecté à la propriété Key et<br />

l’autre à la propriété IV correspondant au vecteur. Ajoutez deux membres à la classe Cryptor définissant un tableau de<br />

8 bits nommé Key et un second nommé Vector :<br />

private static byte[] Key = new byte[]<br />

{ 140, 58, 74, 45, 196, 24, 19, 220 };<br />

private static byte[] Vector = new byte[]<br />

{ 211, 26, 16, 198, 172, 15, 1, 3 };<br />

Les valeurs de la clé et du vecteur doivent être identiques lors de l’opération de décryptage à celles qui ont été<br />

utilisées pour l’opération d’encryptage.<br />

Vous pouvez maintenant créer un objet DESCryptoServiceProvider, initialiser sa clé et son vecteur afin d’obtenir une<br />

instance d’objet ICryptoTransform. C’est cet objet qui va réaliser le cryptage <strong>des</strong> données grâce à sa méthode<br />

TransformFinalBlock :<br />

public static byte[] SwitchCrypt(byte[] data)<br />

{<br />

DESCryptoServiceProvider o = new DESCryptoServiceProvider();<br />

o.Key = Key;<br />

o.IV = Vector;<br />

ICryptoTransform cryptor = o.CreateEncryptor();<br />

return cryptor.TransformFinalBlock(data, 0, data.Length);<br />

}<br />

Le cryptage <strong>avec</strong> l’objet DESCryptoServiceProvider étant symétrique, la méthode pour l’encryptage et le décryptage<br />

est identique.<br />

Créez une surcharge de la méthode SwitchCrypt prenant en charge les objets de type string :<br />

public static string SwitchCrypt(string s)<br />

{<br />

byte[] original = Encoding.UTF8.GetBytes(s);<br />

byte[] switched = Cryptor.SwitchCrypt(original);<br />

return Encoding.UTF8.GetString(switched);<br />

}<br />

Pour finir la sécurisation du mot de passe, ajoutez l’attribut XmlIgnore sur la propriété Password de la classe<br />

MailServerSettings et ajoutez une nouvelle propriété publique :<br />

public string CryptedPassword<br />

© ENI Editions - All rigths reserved - Algeria Educ<br />

- 1 -

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!