Le imprese spesso si basano su XML per lo scambio di dati, ma condivisione informazioni arriva a un rischio. Numeri di carta di credito, numeri di telefono, indirizzi, nomi e informazioni proprietarie aziendali del cliente costituiscono alcune aree di dati sensibili. Quello che potrebbe essere opportuno condividere con un partner, cliente o cliente, potrebbe non essere sicuro con un altro. Fortunatamente, i dati XML possono essere crittografati per proteggerlo. La procedura riportata di seguito utilizza il .net Framework e il linguaggio c#, ma tecniche di crittografia XML esistono in Java e altri Framework.
Istruzioni
Crittografia e decrittografia di un File XML
1
Creare un documento XML che contiene dati sensibili:
< ordine >
< elementi >
< item > 444444
< quantità > 3 < / quantità >
< CostPerItem > 50.00 < / CostPerItem >
< / item >
< / articoli >
< CreditCardNumber > 0000123456789000 < / CreditCardNumber >
Visa di < CreditCardType > < / CreditCardType >
< / ordine >
2
Salvare il file come \"Order.xml\" in una cartella denominata ordini.
3
Creare un'applicazione console in Visual Studio. Aprire Visual Studio. Selezionare \"File--> nuovo progetto, \" e quindi selezionare l'icona per \"Console applicazione. \" aggiungere al progetto un riferimento a System. Security. Aggiungere il seguente \"using\" istruzioni all'inizio del file di programma:
utilizzando il sistema
VAI
utilizzando System.Security.Cryptography
VAI
utilizzando Cryptography
VAI
utilizzando System. Text
VAI
using System. XML;
4
Leggere il file XML. All'interno del metodo Main del programma, è necessario creare un'istanza di un oggetto XmlDocument e caricare il file XML in esso:
XmlDocument xmlDoc = new XmlDocument)
VAI
xmlDoc.Load(\"c:\\\\Orders\\\\order.xml\");
5
Creare una chiave di crittografia. Ci sono un numero da scegliere, di variare i punti di forza e che impiegano diversi tipi di chiavi (vedere \"Cryptography a. Net\"nella sezione risorse). Questo esempio utilizza la crittografia TripleDES:
EncryptionKey TripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider ();
6
Isolare un elemento xml dal file per crittografare e creare un'istanza di un oggetto XmlElement per contenerlo. Per crittografare l'intero file, selezionare l'elemento radice. In questo esempio, la radice è il nodo \"Order\":
XmlElement orderElem = xmlDoc.SelectSingleNode(\"Order\") as XmlElement
VAI
Se si desidera crittografare solo il nodo di CreditCardInformation, si scriverebbe come questo:
XmlElement orderElem = xmlDoc.SelectSingleNode(\"Order/CreditCardInformation\") as XmlElement;
7
Crittografare i dati utilizzando la chiave di crittografia creata in precedenza:
EncryptedXml encXml = nuovo EncryptedXml(xmlDoc)
VAI
byte[] encryptedOrder = encXml.EncryptData(orderElem, encryptionKey, false);
8
Creare un'istanza di un oggetto EncryptedData. Insieme è proprietà URI per sia gli elementi di dati xml crittografati e l'algoritmo di crittografia:
EncryptedData encryptedData = new EncryptedData
VAI
encryptedData.Type = EncryptedXml.XmlEncElementUrl
VAI
encryptedData.EncryptionMethod = new
EncryptionMethod(EncryptedXml.XmlEncTripleDESUrl);
9
Impostare la proprietà CipherValue dell'oggetto EncryptedData ai dati crittografati sopra:
encryptedData.CipherData = nuovo CipherData()
VAI
encryptedData.CipherData.CipherValue = encryptedOrder;
10
Sostituire il contenuto del nodo xml con il contenuto crittografato:
ReplaceElement (orderElem, encryptedData, false);
11
Salvare i dati xml:
xmlDoc.Save(\"c:\\Orders\\encryptedOrder.xml\");
12
Per decrittografare i dati crittografati, è essenzialmente invertire il processo. In questo esempio, i dati verranno decrittografati nello stesso programma e utilizzano la stessa variabile come la chiave crittografata. In una situazione reale, uno sarebbe inviare la chiave al destinatario in un file separato da xml crittografato (o condividerlo in qualche altro modo). Segue il codice di decrittazione:
Ottenere i dati dal nome tag
XmlElement encOrderElem = xmlDoc.GetElementsByTagName(\"EncryptedData\")[0] as XmlElement
VAI
Dati di carico in un EncryptedData eccepito
EncryptedData encData = new EncryptedData()
VAI
encData.LoadXml(encOrderElem)
VAI
Decrittografare i dati utilizzando la chiave creata in precedenza
EncryptedXml encryptedXml = new EncryptedXml()
VAI
byte[] decryptedOrder = encryptedXml.DecryptData(encData, encryptionKey)
VAI
// Replace the encrypted data with decrypted data in your xml document
encryptedXml.ReplaceData(encOrderElem, decryptedOrder)
VAI
// Save another file
xmlDoc.Save(\"c:\\\\Orders\\\\decryptedOrder.xml\");
Consigli & Avvertenze
- Quanto sopra è un esempio molto semplice di ciò che può essere un processo estremamente complesso. La crittografia è una vasta area degna di ampio studio. Vedere le sezioni di risorse e riferimenti di questo articolo per i collegamenti a comprendere.
- Il codice precedente si presuppone di aver messo il file XML di esempio in una cartella denominata ordini, che risiede nella directory principale di un'unità con lettere \"C.\" se la configurazione del sistema è diverso o che hai creato i file di esempio in altre cartelle, ricordarsi di modificare di conseguenza i percorsi dei file.