Comment chiffrer un fichier XML Programatically

Les entreprises comptent souvent sur XML pour échanger des données, mais le partage d'informations arrive à un risque. numéros de cartes de crédit, numéros de téléphone, adresses, noms des clients et des renseignements commerciaux exclusifs représentent certaines zones de données sensibles. Ce qui pourrait être approprié de partager avec un client, partenaire ou client, peuvent ne pas être en sécurité avec un autre. Heureusement, des données XML peuvent être chiffrés pour le protéger. Les étapes ci-dessous utilisent le .Net Framework et le langage C #, mais les techniques de chiffrement XML existe en Java et d'autres cadres ainsi.

Choses que vous devez

  • Un environnement de développement Visual # C (voir la section Ressources pour un lien pour télécharger une version express gratuitement)
  1. Codage et décodage d'un fichier XML

    • 1

      Créer un document XML qui contient des données sensibles:


      &# 9-
      &# 9-&# 9-444444
      &# 9-&# 9-&# 9-3
      &# 9-&# 9-&# 9-50.00
      &# 9-&# 9-

      &# 9-

      &# 9-0000123456789000
      &# 9-Visa

    • 2

      Enregistrez ce fichier sous "Order.xml" dans un dossier appelé commandes.

    • 3

      Créer une application console dans Visual Studio. Ouvrez Visual Studio. Sélectionner "Déposer --gt; Nouveau Projet," puis sélectionnez l'icône "Application console." Ajouter une référence à System.Security au projet. Ajouter le texte suivant "aide" des déclarations à la partie supérieure de votre fichier de programme:

      Système utilisant
      GO
      utilisant System.Security.Cryptography
      GO
      utilisant System.Security.Cryptography.Xml
      GO
      using System.Text
      GO
      using System.Xml;

    • 4

      Lire dans le fichier XML. Dans la méthode principale de votre programme, instancier un objet XmlDocument et charger le fichier XML en elle:

      &# 9-XmlDocument xmlDoc = new XmlDocument ()
      GO

       &# 9-xmldoc.Load ("-c: commandes Order.xml " -) -
    • 5

      Créer une clé de cryptage. Il ya un certain nombre de choix, de faire varier les points forts et en employant différents types de clés (voir "Cryptographie en .Net" dans la section Ressources). Cet exemple utilise le chiffrement TripleDES:

      TripleDESCryptoServiceProvider encryptionKey = new &# 9-TripleDESCryptoServiceProvider ();

    • 6

      Isoler un élément XML à partir de votre fichier à crypter et instancier un objet XmlElement pour la contenir. Pour crypter la totalité du fichier, sélectionnez son élément racine. Dans cet exemple, la racine est le nœud "Ordre":

      &# 9-XmlElement orderElem = xmlDoc.SelectSingleNode ("Ordre") Comme XmlElement
      GO

      Si vous voulez crypter uniquement le nœud de CreditCardInformation, vous pouvez écrire comme ceci:

      &# 9-XmlElement orderElem = &# 9-xmlDoc.SelectSingleNode ("Commande / CreditCardInformation") Comme XmlElement;

    • 7

      Crypter les données en utilisant la clé de chiffrement créé ci-dessus:




      &# 9-EncryptedXml encXml = new EncryptedXml (xmlDoc)
      GO

       byte [] = encryptedOrder encXml.EncryptData (orderElem, encryptionKey, false) -
    • 8

      Instancier un objet EncryptedData. Définir ses propriétés URI pour les deux éléments XML cryptés et l'algorithme de chiffrement:

      &# 9-EncryptedData encryptedData = new EncryptedData ()
      GO

       &# 9-encryptedData.Type = EncryptedXml.XmlEncElementUrl

      GO

       &# 9-encryptedData.EncryptionMethod = new &# 9-&# 9-&# 9- &# 9-&# 9-

      &# 9-&# 9-EncryptionMethod (EncryptedXml.XmlEncTripleDESUrl);

    • 9

      Définissez la propriété CipherData.CipherValue de l'objet EncryptedData aux données que vous chiffré ci-dessus:

      &# 9-encryptedData.CipherData = new CipherData ()
      GO

       &# 9-encryptedData.CipherData.CipherValue = encryptedOrder-
    • 10

      Remplacez le contenu de votre noeud XML avec le contenu crypté:

      &# 9-EncryptedXml.ReplaceElement (orderElem, encryptedData, false);

    • 11

      Enregistrez le xml chiffré:

      &# 9-xmlDoc.Save ("c: commandes encryptedOrder.xml");

    • 12

      Pour déchiffrer les données chiffrées, vous essentiellement inverser le processus. Pour cet exemple, les données sont décryptées dans le même programme et utilisent la même variable en tant que clé cryptée que lui. Dans une situation du monde réel, on pourrait envoyer la clé au destinataire dans un fichier séparé du xml cryptée (ou le partager d'une autre manière). Le code de décryptage suit:




      &# 9-&# 9 - // Obtenir les données par nom de tag

       &# 9-XmlElement encOrderElem = &# 9-&# 9-xmlDoc.GetElementsByTagName ("-EncryptedData " -) [0] comme XmlElement

      GO

      &# 9-&# 9 - données // Charger dans un EncryptedData opposés

      EncryptedData encData = new EncryptedData ()

      GO

      encData.LoadXml (encOrderElem)

      GO

      &# 9-&# 9 - // décrypter les données à l'aide de la clé créée ci-dessus

      EncryptedXml EncryptedXml = new EncryptedXml ()

      GO

      byte [] = decryptedOrder encryptedXml.DecryptData (encData, encryptionKey)

      GO

      // Remplacer les données cryptées avec des données décryptées dans votre document xml
      encryptedXml.ReplaceData (encOrderElem, decryptedOrder)

      GO

      // Enregistrer un autre fichier
      xmlDoc.Save ("-c: commandes decryptedOrder.xml " -) -

    Conseils & Avertissements

    • Ce qui précède est un exemple très simple de ce que peut être un processus extrêmement complexe. La cryptographie est une vaste zone digne d'une étude approfondie. Voir les références et les sections des ressources de cet article pour les liens à approfondir votre compréhension.
    • Le code ci-dessus suppose que vous avez placé votre fichier XML de l'échantillon dans un dossier appelé commandes, qui réside sur la racine d'un lecteur lettrée "C." Si la configuration de votre système diffère ou que vous avez créé vos fichiers d'exemples dans d'autres dossiers, pensez à changer les chemins de fichiers en conséquence.
    » » » » Comment chiffrer un fichier XML Programatically