Hey .Netters, ik had weer zin om eens een tut te maken dus hier bij deze:
Dit is geen beginners tutorial maar als je al een beetje gewend bent om Object Oriented te proggen dan moet dit geen probleem zijn.
In de tutorial leg ik uit hoe je doormiddel van een Encryption provider je "onbeveiligde" xml document kan encrypten en decrypten.
Stap 1| Project starten
Allereerst maak je een project aan in Visual Studio 2005/2008. Ik heb hem voor deze tut 'XMLEncryptionTutorial' genoemd
Stap 2| Initiele benodigdheden
Zet op het form dat verschijnt 2 knoppen, en noem ze "btnEncrypt" en "btnDecrypt"
zet de 'Enabled' eigenschap van de knop 'btnDecrypt' op "False"
Ook is er voor deze tut een extra niet-"standaard" namespace, namelijk "System.Security" deze dient eerst aan het project toegevoegd te worden.
In de Code view van het form zet je helemaal bovenaan de volgende imports
Imports System.Xml
Imports System.Security.Cryptography
Imports System.Security.Cryptography.Xml
In deze zelfde view zet je de volgende Private variabel:
Private EncyptionKey As Byte()
Stap 3| Knoppen events
Zodra we dubbelklikken op de knop "btnEncrypt" kunnen we beginnen met het schrijven van de code.
Als eerst maken we de code aan om een nieuw
De Code ziet er dan als het goed is alsvolgt uit:
Imports System.Xml
Imports System.Security.Cryptography
Imports System.Security.Cryptography.Xml
Public Class Form1
Private EncyptionKey As Byte()
Private Sub btnEncrypt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEncrypt.Click
End Sub
End Class
Stap 4| De xml Encrypten
Omdat dit om een tutorial gaat heb ik gekozen voor een simpele xml structuur om alleen het effect te laten zien van het encrypten. Je kunt deze code verder gebruiken bij alle soorten xml files.
Hieronder volgt de eerste code voor het decrypten, daarin wordt ook de xml file aangemaakt (in het geheugen)
Dim XmlDoc As New XmlDocument
Dim TDesProvider As New TripleDESCryptoServiceProvider()
'Mini XML document maken:
Dim Root As XmlElement = XmlDoc.CreateElement("Root")
Dim Child As XmlElement = XmlDoc.CreateElement("Child")
Child.InnerText = "Deze tutorial is F*cking Awesome!"
Root.AppendChild(Child)
XmlDoc.AppendChild(Root)
Zoals je ziet hebben we ook een 'TripleDESCryptoServiceProvider' aangemaakt, in deze klasse staat zit het algoritme van de TripleDes Encrypty.
In de volgende reeks code, gaan we de ParentElement (in ons geval is dat 'Root') aanwijzen en encrypten naar een byte array:
'Selecteer in dit geval de ParentElement om de gehele xml te encrypten
Dim ParentElement As XmlElement = XmlDoc.DocumentElement
Dim XMLEncrypted As EncryptedXml = New EncryptedXml(XmlDoc)
'De ParentElement encypted opslaan in een Byte Array
Dim EncryptedParentElement As Byte() = XMLEncrypted.EncryptData(ParentElement, TDesProvider, False)
Dim ED As New EncryptedData()
'De w3c pagina voor het gebruik van TripleDes xml element encryptie
ED.Type = EncryptedXml.XmlEncElementUrl
'TripleDes algoritme;
ED.EncryptionMethod = New EncryptionMethod(EncryptedXml.XmlEncTripleDESUrl)
'Een ChipherData class kan de encypted data weergeven als XML Element
ED.CipherData = New CipherData()
ED.CipherData.CipherValue = EncryptedParentElement
EncryptedXml.ReplaceElement(ParentElement, ED, False)
'Onthouden met welke sleutel we de xmlfile hebben ge-encrypt:
EncyptionKey = TDesProvider.Key
Het ouder ParentElement is nu vervangen door de Encrypted Chipher data, nu moeten we de file opslaan om te zien wat het resultaat is:
'Een nieuw bestand aanmaken om de XML in op te slaan
Dim file As New IO.FileStream(Application.StartupPath & "\encrypted.xml", IO.FileMode.Create)
XmlDoc.Save(file)
file.Close()
'De decrypt button actief maken
btnDecrypt.Enabled = True
Ook zetten we gelijk de 'btnDecrypt' op enabled om strax dezelfde file te kunnen decrypten.
Stap 5| Het Encrypten is klaar
Je kunt je applicatie nu starten om te zien of het gelukt is!
bij mij zag het er alsvolgt uit:
De orginele xml file:
<Root>
<Child>Deze tutorial is F*cking Awesome!</Child>
</Root>
De encrypted versie van dezelfde file
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
<CipherData>
<CipherValue>g47v+vGOWW2MGbGJiXLAtZ5Ku8dhWI+uiUg3Lv/+lbJ54OCuJVtn4IU26rcsVvRZUhg7YA+uY69/0MqScctd/lYBfprfoPPC</CipherValue>
</CipherData>
</EncryptedData>
Stap 6| Het Decrypten van de xml file
Als je vanaf je form dubbel klikt op de Decrypt button, dan verschijnt de implementatie van het click event. Hierin gaan we de Decrypt code schrijven die de zojuist opgeslagen file gaat decrypten
Allereerst openen we de xml en stellen we de Triple Des Provider in met de zojuist gebruikte key:
'De encrypted xml file openen
Dim EncryptedXMLDoc As New XmlDocument()
Dim file As New IO.FileStream(Application.StartupPath & "\encrypted.xml", IO.FileMode.Open)
EncryptedXMLDoc.Load(file)
file.Close()
Dim TDesProvider As New TripleDESCryptoServiceProvider()
'De net gebruikte key ook gebruiken bij het decrypten
TDesProvider.Key = EncyptionKey
Hierna ga je de juiste element opzoeken dat gedecrypt kan worden:
'De chipherdata opzoeken om die te kunnen decrypten
Dim EncryptedElement As XmlElement = EncryptedXMLDoc.GetElementsByTagName("EncryptedData")(0)
Dim ED As New EncryptedData()
ED.LoadXml(EncryptedElement)
'Decrypten met de Triple Des provider
Dim XMLEncrypted As New EncryptedXml()
Dim DecryptedElement As Byte() = XMLEncrypted.DecryptData(ED, TDesProvider)
'De encrypted element vervangen door de decrypted
XMLEncrypted.ReplaceData(EncryptedElement, DecryptedElement)
De xml is nu weer decrypted, nu kunnen we gaan uitlezen wat er instond:
'Het resultaat weergeven:
MsgBox(EncryptedXMLDoc.ChildNodes(0).ChildNodes(0).InnerText)
Nou je kunt wel raden wat het resultaat is, mits je goed hebt opgelet
Hopelijk was het een leerzame en leuke tutorial, ik hoop dat jullie er iets aan hebben.
ik zal de source nog uploaden uiteraard staat alle code in de tut zelf. Hieronder staat nogmaals de code op een rijtje:
Source Code 
Imports System.Xml
Imports System.Security.Cryptography
Imports System.Security.Cryptography.Xml
Public Class Form1
Private EncyptionKey As Byte()
Private Sub btnEncrypt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEncrypt.Click
Dim XmlDoc As New XmlDocument
Dim TDesProvider As New TripleDESCryptoServiceProvider()
'Mini XML document maken:
Dim Root As XmlElement = XmlDoc.CreateElement("Root")
Dim Child As XmlElement = XmlDoc.CreateElement("Child")
Child.InnerText = "Deze tutorial is F*cking Awesome!"
Root.AppendChild(Child)
XmlDoc.AppendChild(Root)
'Selecteer in dit geval de ParentElement om de gehele xml te encrypten
Dim ParentElement As XmlElement = XmlDoc.DocumentElement
Dim XMLEncrypted As EncryptedXml = New EncryptedXml(XmlDoc)
'De ParentElement encypted opslaan in een Byte Array
Dim EncryptedParentElement As Byte() = XMLEncrypted.EncryptData(ParentElement, TDesProvider, False)
Dim ED As New EncryptedData()
'De w3c pagina voor het gebruik van TripleDes xml element encryptie
ED.Type = EncryptedXml.XmlEncElementUrl
'TripleDes algoritme;
ED.EncryptionMethod = New EncryptionMethod(EncryptedXml.XmlEncTripleDESUrl)
'Een ChipherData class kan de encypted data weergeven als XML Element
ED.CipherData = New CipherData()
ED.CipherData.CipherValue = EncryptedParentElement
EncryptedXml.ReplaceElement(ParentElement, ED, False)
'Onthouden met welke sleutel we de xmlfile hebben ge-encrypt:
EncyptionKey = TDesProvider.Key
'Een nieuw bestand aanmaken om de XML in op te slaan
Dim file As New IO.FileStream(Application.StartupPath & "\encrypted.xml", IO.FileMode.Create)
XmlDoc.Save(file)
file.Close()
'De decrypt button actief maken
btnDecrypt.Enabled = True
End Sub
Private Sub btnDecrypt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDecrypt.Click
'De encrypted xml file openen
Dim EncryptedXMLDoc As New XmlDocument()
Dim file As New IO.FileStream(Application.StartupPath & "\encrypted.xml", IO.FileMode.Open)
EncryptedXMLDoc.Load(file)
file.Close()
Dim TDesProvider As New TripleDESCryptoServiceProvider()
'De net gebruikte key ook gebruiken bij het decrypten
TDesProvider.Key = EncyptionKey
'De chipherdata opzoeken om die te kunnen decrypten
Dim EncryptedElement As XmlElement = EncryptedXMLDoc.GetElementsByTagName("EncryptedData")(0)
Dim ED As New EncryptedData()
ED.LoadXml(EncryptedElement)
'Decrypten met de Triple Des provider
Dim XMLEncrypted As New EncryptedXml()
Dim DecryptedElement As Byte() = XMLEncrypted.DecryptData(ED, TDesProvider)
'De encrypted element vervangen door de decrypted
XMLEncrypted.ReplaceData(EncryptedElement, DecryptedElement)
'Het resultaat weergeven:
MsgBox(EncryptedXMLDoc.ChildNodes(0).ChildNodes(0).InnerText)
End Sub
End Class
Laters!!
Jelle