Come crittografare un file XML Programatically

June 19

Come crittografare un file XML Programatically


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.

istruzione

Criptare e decriptare un file XML

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(\&quot;c:\\\\Orders\\\\order.xml\&quot;);

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(\&quot;EncryptedData\&quot;)[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(\&quot;c:\\\\Orders\\\\decryptedOrder.xml\&quot;);

Consigli e avvertenze

  • Quanto sopra è un esempio molto semplice di quello che può essere un processo estremamente complesso. La crittografia è una vasta area degna di ampio studio. Vedere i riferimenti e le sezioni Risorse di questo articolo per i collegamenti per promuovere la vostra comprensione.
  • Il codice di cui sopra presuppone che hai messo il file XML di esempio in una cartella denominata Ordini, che risiede nella radice di un disco con lettere \ "C. \" Se il tuo è diverso configurazione del sistema o aver creato il file di esempio in altre cartelle, ricordarsi di cambiare i percorsi dei file di conseguenza.