June 19
Le aziende spesso si basano su XML per lo scambio di dati, ma la condivisione delle informazioni giunge in un rischio. numeri di carta di credito, numeri di telefono, indirizzi, nomi di clienti e le informazioni aziendali proprietarie costituiscono alcune aree di dati sensibili. Ciò che potrebbe essere opportuno condividere con un cliente, partner o clienti, non può essere sicuro con un altro. Fortunatamente, i dati XML possono essere crittografati per proteggerlo. I passaggi riportati di seguito utilizzano il .Net Framework e il linguaggio C #, ma le tecniche di crittografia XML esistono in Java e altri framework come bene.
1 Creare un documento XML che contiene dati sensibili:
<Order>
<> Articoli
<Item> 444444
<Quantità> 3 </ Quantità>
<CostPerItem> 50.00 </ CostPerItem>
</ Item>
</ Articoli>
<CreditCardNumber> 0000123456789000 </ CreditCardNumber>
<CreditCardType> Visa </ CreditCardType>
</ Order>
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, \" ". Applicazione Console \" e quindi selezionare l'icona per \ Aggiungere un riferimento al System.Security al progetto. Aggiungere il seguente \ "con \" dichiarazioni alla parte superiore del file di programma:
using System
ANDARE
utilizzando System.Security.Cryptography
ANDARE
utilizzando System.Security.Cryptography.Xml
ANDARE
utilizzando System.Text
ANDARE
using System.Xml;
4 Leggere nel file XML. All'interno del metodo Main del vostro programma, un'istanza di un oggetto XmlDocument e caricare il file XML in esso:
XmlDocument xmlDoc = new XmlDocument ()
ANDARE
xmlDoc.Load(\"c:\\\\Orders\\\\order.xml\");
5 Creare una chiave di crittografia. Ci sono una serie tra cui scegliere, di varia i punti di forza e utilizzando diversi tipi di tasti (vedi \ "Cryptography in .Net \" nella sezione Risorse). In questo esempio si utilizza la crittografia TripleDES:
TripleDESCryptoServiceProvider encryptionKey = new TripleDESCryptoServiceProvider ();
6 Isolare un elemento XML dal file per crittografare e un'istanza di un oggetto XmlElement per contenerla. Per crittografare l'intero file, selezionare il suo elemento principale. In questo esempio, la radice è il nodo \ "Order \":
XmlElement orderElem = xmlDoc.SelectSingleNode (\ "Order \") come XmlElement
ANDARE
Se si voleva crittografare solo il nodo CreditCardInformation, si può scrivere in questo modo:
XmlElement orderElem = xmlDoc.SelectSingleNode (\ "Ordine / CreditCardInformation \") come XmlElement;
7 Crittografare i dati utilizzando la chiave di crittografia creato in precedenza:
EncryptedXml encXml = new EncryptedXml (xmlDoc)
ANDARE
byte[] encryptedOrder = encXml.EncryptData(orderElem, encryptionKey, false);
8 Un'istanza di un oggetto EncryptedData. Impostare è proprietà URI per entrambi gli elementi XML crittografati e l'algoritmo di crittografia:
EncryptedData EncryptedData = new EncryptedData ()
ANDARE
encryptedData.Type = EncryptedXml.XmlEncElementUrl
ANDARE
encryptedData.EncryptionMethod = new
EncryptionMethod (EncryptedXml.XmlEncTripleDESUrl);
9 Impostare la proprietà CipherData.CipherValue dell'oggetto EncryptedData ai dati crittografati in precedenza:
encryptedData.CipherData = new CipherData ()
ANDARE
encryptedData.CipherData.CipherValue = encryptedOrder;
10 Sostituire il contenuto del nodo XML con il contenuto criptato:
EncryptedXml.ReplaceElement (orderElem, EncryptedData, false);
11 Salvare il xml cifrato:
xmlDoc.Save (\ "C: \\ Ordini \\ encryptedOrder.xml \");
12 Per decrittografare i dati crittografati, si inverte sostanzialmente il processo. Per questo esempio, i dati vengono decifrati nello stesso programma e utilizzare la stessa variabile come chiave cifrata esso. In una situazione del mondo reale, si potrebbe inviare la chiave al destinatario in un file separato dalla XML crittografato (o condividerlo in qualche altro modo). Il codice di decrittazione segue:
// Ottenere i dati per nome tag
XmlElement encOrderElem = xmlDoc.GetElementsByTagName(\"EncryptedData\")[0] as XmlElement
ANDARE
// Caricare i dati in un EncryptedData opposti
EncryptedData encData = new EncryptedData()
ANDARE
encData.LoadXml(encOrderElem)
ANDARE
// Decodificare i dati utilizzando la chiave creata in precedenza
EncryptedXml encryptedXml = new EncryptedXml()
ANDARE
byte[] decryptedOrder = encryptedXml.DecryptData(encData, encryptionKey)
ANDARE
// Replace the encrypted data with decrypted data in your xml document
encryptedXml.ReplaceData(encOrderElem, decryptedOrder)
ANDARE
// Save another file
xmlDoc.Save(\"c:\\\\Orders\\\\decryptedOrder.xml\");