Reactie plaatsen 
 
Waardering:
  • 0 stemmen - gemiddelde waardering is 0
  • 1
  • 2
  • 3
  • 4
  • 5
[vb.net 2005/2008] Opslaan en laden van een Encrypted xml file
Auteur Bericht
Jelle Offline
.Net, I love it!
****

Berichten: 283
Lid sinds: 08-2006
Reputatie: 20
Bericht: #1
Question [vb.net 2005/2008] Opslaan en laden van een Encrypted xml file
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
Code VBNET :
 
Imports System.Xml
Imports System.Security.Cryptography
Imports System.Security.Cryptography.Xml
 


In deze zelfde view zet je de volgende Private variabel:
Code VBNET :
 
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:
Code VBNET :
 
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)
Code VBNET :
 
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:
Code VBNET :
 
'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:
Code VBNET :
 
'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:
Code XML :
 
<Root>
<Child>Deze tutorial is F*cking Awesome!</Child>
</Root>
 


De encrypted versie van dezelfde file
Code XML :
 
<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:
Code VBNET :
 
'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:
Code VBNET :
 
'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:

Code VBNET :
 
'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


Code VBNET :
 
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

Mijn Tutorials:
> Maak je eigen game! (vb.net)> [Deel 1] [Deel 2] [Deel 3] (C#)> [Deel 1] [Deel 2] [Deel 3]
> Opslaan en laden van een Encrypted xml file (vb.net)> [Open]
[Afbeelding: plzbannerep2wk1.png]
(Dit bericht is het laatst bewerkt op 29-07-2008 om 09:36:56 door Jelle.)
29-07-2008 00:26:11
De website van deze gebruiker bezoeken Alle berichten van deze gebruiker zoeken Reageren op dit bericht
Lt.Quintyn Offline
Junior Member
**

Berichten: 17
Lid sinds: 01-2009
Reputatie: 20
Bericht: #2
RE: [vb.net 2005/2008] Opslaan en laden van een Encrypted xml file
Mooie tutorial ik zou alleen wat meer uitleg geven over de functies van de codes en niet alleen hetgeen opschrijven wat ingevoerd moet worden.
26-01-2009 17:53:40
Alle berichten van deze gebruiker zoeken Reageren op dit bericht
Reactie plaatsen 


Ga naar locatie:


Contact opnemen | Ep2 | Naar boven | Naar inhoud | Archiefmodus | RSS-syndicatie