|
VB.NET • Use an Asymmetric Algorithm to Encrypt and Decrypt Listing 2. The AsymmetricExample class uses the RSACryptoServiceProvider class to encrypt and decrypt information stored in an XML document called AsymmetricExample.xml, which resides in the C: drive's root directory. Notice how the class uses a byte array for encryption and decryption of the actual contents. Imports System
Imports System.Security.Cryptography
Imports System.IO
Imports System.Xml
Public Class AsymmetricExample
Private KeyFileName As String = _
"c:\AsymmetricKey.xml"
Private FileName As String = _
"c:\AsymmetricExample.xml"
Private CryptoProvider As _
RSACryptoServiceProvider = New _
RSACryptoServiceProvider(2048)
Public Server As String = "(local)"
Public Database As String = "Northwind"
Public User As String = "sa"
Public Password As String = ""
Public Provider As String = "SQLOLEDB"
Public Sub New()
If Not File.Exists(KeyFileName) Then
Dim FileWriter As FileStream = New _
FileStream(KeyFileName, _
FileMode.Create)
Dim XmlWriter As XmlTextWriter = New _
XmlTextWriter(FileWriter, _
System.Text.Encoding.UTF8)
XmlWriter.WriteRaw _
(CryptoProvider.ToXmlString(True))
XmlWriter.Close()
FileWriter.Close()
Else
Dim FileReader As FileStream = New _
FileStream(KeyFileName, _
FileMode.Open)
Dim XmlReader As XmlTextReader = New _
XmlTextReader(FileReader)
Dim XmlDoc As XmlDocument = New _
XmlDocument()
XmlDoc.Load(XmlReader)
CryptoProvider.FromXmlString _
(XmlDoc.InnerXml)
End If
End Sub
Public Sub Encrypt()
Dim MemWriter As StringWriter = New _
StringWriter()
Dim XmlWriter As XmlTextWriter = New _
XmlTextWriter(MemWriter)
XmlWriter.WriteStartDocument()
XmlWriter.WriteStartElement _
("Configuration")
XmlWriter.WriteStartElement("Data")
XmlWriter.WriteElementString("Server", _
Server)
XmlWriter.WriteElementString("Database", _
Database)
XmlWriter.WriteElementString("User", User)
XmlWriter.WriteElementString("Password", _
Password)
XmlWriter.WriteElementString("Provider", _
Provider)
XmlWriter.WriteEndElement()
XmlWriter.WriteEndElement()
XmlWriter.WriteEndDocument()
Dim CryptoWriter As FileStream = New _
FileStream(FileName, FileMode.Create)
Dim Contents As String = _
MemWriter.ToString()
Dim Xml(Contents.Length - 1) As Byte
Dim n As Integer = 0
For n = 0 To Contents.Length - 1
Xml(n) = _
Convert.ToByte(Contents.Chars(n))
Next
Dim Text(Xml.Length - 1) As Byte
Text = CryptoProvider.Encrypt(Xml, False)
CryptoWriter.Write(Text, 0, Text.Length)
CryptoWriter.Close()
XmlWriter.Close()
MemWriter.Close()
End Sub
Public Sub Decrypt()
If Not File.Exists(FileName) Then
Me.Encrypt()
End If
Dim FileReader As FileStream = New _
FileStream(FileName, FileMode.Open)
Dim Contents(FileReader.Length - 1) As Byte
FileReader.Read(Contents, 0, _
Convert.ToInt32(FileReader.Length))
Dim Xml(Contents.Length - 1) As Byte
Xml = CryptoProvider.Decrypt(Contents, False)
Dim Text(Xml.Length - 1) As Char
Xml.CopyTo(Text, 0)
Dim StringText As String = New String(Text)
Dim memreader As StringReader = New _
StringReader(StringText)
Dim XmlReader As XmlTextReader = New _
XmlTextReader(memreader)
Dim XmlDoc As XmlDocument = New _
XmlDocument()
XmlDoc.Load(XmlReader)
Dim XPath As String = _
"/Configuration/Data/"
Server = XmlDoc.SelectSingleNode(XPath & _
"Server").InnerText
Database = XmlDoc.SelectSingleNode(XPath _
& "Database").InnerText
User = XmlDoc.SelectSingleNode(XPath & _
"User").InnerText
Password = XmlDoc.SelectSingleNode(XPath _
& "Password").InnerText
Provider = XmlDoc.SelectSingleNode(XPath _
& "Provider").InnerText
FileReader.Close()
memreader.Close()
XmlReader.Close()
End Sub
End Class
|