Torna al Thread

Per crittografare un elemento XML con una chiave asimmetrica 1.Creare un oggetto CspParameters e specificare il nome del contenitore di chiavi. Dim cspParams As New CspParameters() cspParams.KeyContainerName = "XML_ENC_RSA_KEY" 2. Generare una chiave simmetrica utilizzando la classe RSACryptoServiceProvider. La chiave viene salvata automaticamente nel contenitore di chiavi quando si passa l'oggetto CspParameters al costruttore della classe RSACryptoServiceProvider. Viene utilizzata per crittografare la chiave di sessione AES e può essere recuperata in un secondo momento per decrittografarla. Dim rsaKey As New RSACryptoServiceProvider(cspParams) 3. Creare un oggetto XmlDocument caricando un file XML dal disco. L'oggetto XmlDocument contiene l'elemento XML da crittografare. ' Create an XmlDocument object. Dim xmlDoc As New XmlDocument() ' Load an XML file into the XmlDocument object. Try xmlDoc.PreserveWhitespace = True xmlDoc.Load("test.xml") Catch e As Exception Console.WriteLine(e.Message) End Try 4. Trovare l'elemento specificato nell'oggetto XmlDocument e creare un nuovo oggetto XmlElement per rappresentare l'elemento da crittografare. In questo esempio viene crittografato l'elemento "creditcard". Dim elementToEncrypt As XmlElement = Doc.GetElementsByTagName(ElementToEncryptName)(0) ' Throw an XmlException if the element was not found. If elementToEncrypt Is Nothing Then Throw New XmlException("The specified element was not found") End If 5. Creare una nuova chiave di sessione utilizzando la classe RijndaelManaged. Questa chiave verrà utilizzata per crittografare l'elemento XML, quindi sarà a sua volta crittografata e inserita nel documento XML. ' Create a 256 bit Rijndael key. Dim sessionKey As New RijndaelManaged() sessionKey.KeySize = 256 6. Creare una nuova istanza della classe EncryptedXml e utilizzarla per crittografare l'elemento specificato mediante la chiave di sessione. Il metodo EncryptData restituisce l'elemento crittografato come una matrice di byte crittografati. Dim eXml As New EncryptedXml() nn funge Dim encryptedElement As Byte() = eXml.EncryptData(elementToEncrypt, sessionKey, False) 7. Costruire un oggetto EncryptedData e inserire al suo interno l'identificatore URL dell'elemento XML crittografato. Tale identificatore indica a coloro che effettueranno la decrittografia che i dati XML contengono un elemento crittografato. È possibile utilizzare il campo XmlEncElementUrl per specificare l'identificatore URL. L'elemento XML in testo non crittografato verrà sostituito da un elemento <EncrypotedData> incapsulato dall'oggetto EncryptedData. Dim edElement As New EncryptedData() edElement.Type = EncryptedXml.XmlEncElementUrl edElement.Id = EncryptionElementID 8. Creare un oggetto EncryptionMethod inizializzato sull'identificatore URL dell'algoritmo di crittografia utilizzato per generare la chiave di sessione. Passare l'oggetto EncryptionMethod alla proprietà EncryptionMethod. edElement.EncryptionMethod = New EncryptionMethod(EncryptedXml.XmlEncAES256Url) 9. Creare un oggetto EncryptedKey in cui contenere la chiave di sessione crittografata. Crittografare la chiave di sessione, aggiungerla all'oggetto EncryptedKey e immettere un nome della chiave di sessione e l'URL dell'identificatore di chiave. Dim ek As New EncryptedKey() Dim encryptedKey As Byte() = EncryptedXml.EncryptKey(sessionKey.Key, Alg, False) ek.CipherData = New CipherData(encryptedKey) ek.EncryptionMethod = New EncryptionMethod(EncryptedXml.XmlEncRSA15Url) 10. Creare un nuovo oggetto DataReference che esegua il mapping tra i dati crittografati e una determinata chiave di sessione. Questo passaggio facoltativo consente di specificare in modo semplice che più parti di un documento XML sono state crittografate da una singola chiave. Dim dRef As New DataReference() ' Specify the EncryptedData URI. dRef.Uri = "#" + EncryptionElementID ' Add the DataReference to the EncryptedKey. ek.AddReference(dRef) 11. Aggiungere la chiave crittografata all'oggetto EncryptedData. edElement.KeyInfo.AddClause(New KeyInfoEncryptedKey(ek)) 12. Creare un nuovo oggetto KeyInfo per specificare il nome della chiave RSA. Aggiungerla all'oggetto EncryptedData per rendere più semplice l'identificazione della chiave asimmetrica corretta da utilizzare durante la decrittografia della chiave di sessione. ' Create a new KeyInfo element. edElement.KeyInfo = New KeyInfo() ' Create a new KeyInfoName element. Dim kin As New KeyInfoName() ' Specify a name for the key. kin.Value = KeyName ' Add the KeyInfoName element to the ' EncryptedKey object. ek.KeyInfo.AddClause(kin) 13. Aggiungere i dati dell'elemento crittografato all'oggetto EncryptedData. edElement.CipherData.CipherValue = encryptedElement 14. Sostituire l'elemento dell'oggetto XmlDocument originale con l'elemento EncryptedData. Visual Basic EncryptedXml.ReplaceElement(elementToEncrypt, edElement, False) 15. Salvare l'oggetto XmlDocument. xmlDoc.Save("test.xml")
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5