Bedrijven vaak vertrouwen op XML gegevens uit te wisselen, maar delen van de informatie komt op een risico. Credit card nummers, telefoonnummers, adressen, klant namen en eigen bedrijfsgegevens maken sommige gebieden van gevoelige gegevens. Wat misschien wel passend om te delen met een klant, partner of klant, mogelijk niet veilig met een ander. Gelukkig, kunnen XML-gegevens worden gecodeerd om het te beschermen. De volgende stappen gebruiken het .net Framework en de C# taal, maar XML-coderingstechnieken bestaan in Java en andere kaders ook.
Wat die u nodig hebt
- Een Visual C#-ontwikkelomgeving (Zie de sectie bronnen voor een link naar een uitdrukkelijke versie gratis downloaden)
Coderen en decoderen van een XML-bestand
Een XML-document maken dat gevoelige gegevens bevat:
- 444444
3 50,00 0000123456789000 Visa - 444444
Sla dit bestand op als \"Order.xml\" in een map met de naam Orders.
Maak een consoletoepassing in Visual Studio. Open Visual Studio. Selecteer \"File--> nieuwe Project, \" en selecteer vervolgens het pictogram voor \"Console toepassing. \" een verwijzing naar System.Security toevoegen aan het project. Toevoegen van de volgende \"using\" verklaringen naar de top van uw programma-bestand:
met behulp van systeem
GAAN
met behulp van System.Security.Cryptography
GAAN
met behulp van System.Security.Cryptography.Xml
GAAN
met behulp van System.Text
GAAN
met behulp van System.Xml;Lees in het XML-bestand. Instantiëren van een object XmlDocument binnen de Main methode van uw programma, en het XML-bestand laden in het:
XmlDocument xmlDoc = nieuwe XmlDocument()
GAANxmlDoc.Load(\"c:\\\\Orders\\\\order.xml\");
Een coderingssleutel maken. Er zijn een aantal om uit te kiezen, van uiteenlopende sterke punten en verschillende soorten toetsen in dienst (\"Cryptography in Zie. Net\"in de sectie bronnen). In dit voorbeeld maakt gebruik van TripleDES codering:
TripleDESCryptoServiceProvider encryptionKey = nieuwe TripleDESCryptoServiceProvider();
Isoleren van een XML-element uit het bestand te versleutelen en een XmlElement-object om te bevatten het instantiëren. U wilt coderen het hele bestand, selecteer het hoofdelement. In dit voorbeeld is de root het knooppunt \"Order\":
XmlElement orderElem = xmlDoc.SelectSingleNode(\"Order\") als XmlElement
GAANAls je alleen het knooppunt van de creditcard te versleutelen wilde, zou u het schrijven als dit:
XmlElement orderElem = xmlDoc.SelectSingleNode(\"Order/CreditCardInformation\") als XmlElement;
Het coderen van de gegevens met de versleutelingssleutel gemaakt boven:
EncryptedXml encXml = nieuwe EncryptedXml(xmlDoc)
GAANbyte[] encryptedOrder = encXml.EncryptData(orderElem, encryptionKey, false);
Een EncryptedData-object instantiëren. Stel het URI eigenschappen voor zowel de gecodeerde XML-elementen en de coderingsalgoritme:
EncryptedData encryptedData = nieuwe EncryptedData()
GAANencryptedData.Type = EncryptedXml.XmlEncElementUrl
GAAN
encryptedData.EncryptionMethod = new
EncryptionMethod(EncryptedXml.XmlEncTripleDESUrl);
De eigenschap CipherData.CipherValue van het EncryptedData-object ingesteld op de gegevens die u hierboven zijn gecodeerd:
encryptedData.CipherData = nieuwe CipherData()
GAANencryptedData.CipherData.CipherValue = encryptedOrder;
De inhoud van uw XML-knooppunt vervangen door de gecodeerde inhoud:
EncryptedXml.ReplaceElement (orderElem, encryptedData, false);
Sla de gecodeerde xml:
xmlDoc.Save(\"c:\\Orders\\encryptedOrder.xml\");
Om te decoderen van de gecodeerde gegevens, ongedaan kunt u in wezen het proces. In dit voorbeeld worden de gegevens zal worden gedecodeerd in hetzelfde programma en dezelfde variabele gebruiken als sleutel gecrypt het. In een echte wereld situatie, zou de sleutel naar de geadresseerde in een apart bestand verzendt vanuit de gecodeerde xml (of deel het op een andere manier). De decryptie-code als volgt:
De gegevens ophalen door labelnaam
XmlElement encOrderElem = xmlDoc.GetElementsByTagName(\"EncryptedData\")[0] as XmlElement
GAAN
Laden gegevens in een EncryptedData bezwaar
EncryptedData encData = new EncryptedData()
GAAN
encData.LoadXml(encOrderElem)
GAAN
Decoderen van de gegevens met behulp van de sleutel gemaakt boven
EncryptedXml encryptedXml = new EncryptedXml()
GAAN
byte[] decryptedOrder = encryptedXml.DecryptData(encData, encryptionKey)
GAAN
// Replace the encrypted data with decrypted data in your xml documentencryptedXml.ReplaceData(encOrderElem, decryptedOrder)
GAAN
// Save another filexmlDoc.Save(\"c:\\\\Orders\\\\decryptedOrder.xml\");
Tips & waarschuwingen- Het bovenstaande is een heel eenvoudig voorbeeld van wat een uiterst complex proces worden kan. Cryptografie is een uitgestrekt gebied uitgebreide studie waard. Zie de verwijzingen en bronnen secties van dit artikel voor koppelingen naar uw begrip verder.
- De bovenstaande code wordt ervan uitgegaan dat u uw XML-voorbeeldbestand hebt geplaatst in een map met de naam Orders, die zich bevindt in de hoofdmap van een station letters \"C.\" als verschilt van de configuratie van uw systeem of u uw voorbeeldbestanden in andere mappen hebt gemaakt, moet u het bestandspaden dienovereenkomstig.