Gå til innhold

Hvordan lagre et kryptert objekt


Anbefalte innlegg

Heisan

Jeg har en klasse, noe slik:

Public Class ThisRecord
 Public Value1 as STRING
 Public Value2 as LONG
 Public Value3 as DATE
END CLass

ok. Denne klassen skal lagres til fil. Dette kan jeg gjøre enten ved å streame den eller jeg kan bruke BinaryWriter/BinaryReader. Sistnevnte er å foretrekke tror jeg fordi jeg da kan bruker WRITER.WriteString('STRENG') og VB gjør resten for meg. Det som derimot er utfordringen er jo at jeg vil lagre alt innholdet i objektet basert på klassen og disse er jo ikke nødvendigvis strenger. .ToString er jo noe av det første som kommer i tankene, men jeg vil jo gjerne konvertere tilbake også og jeg har ikke sett noe .ToDate funksjon. Jeg kan jo selvsagt bruke WRITER.WriteDate(me.date) o.s.v. men da blir det jo ikke kryptert. Derfor må jeg gå veien om en streng og ser for meg denne som separert med en eller annen greie for så å bruke SPLIT npår jeg leser inn igjen.

 

Tips til dette mottas selvsagt med hei dundrande takk...

 

Ole

Lenke til kommentar
Videoannonse
Annonse
Sjekk ut System.Security.Cryptography.CryptoStream

8105654[/snapback]

Heisan

Klarer ikke se hvordan Cryptography gir meg dette. Mulig jeg forklarte meg litt tungt.

 

Jeg har altså en klasse som skal lagres i en fil. Filen skal kunn bestå av en post.

 

Jeg ønsker noe slik (følgende kode vil ikke kompillere så klart):

public sub SaveObject(ByRef pObject as SomeClass)
 dim File as IO.FileStream, Writer as IO.BinaryWriter
 File = new IO.FileStream("TestFile.txt",IO.FileMode.Open)
 Writer = new IO.BinaryWriter(File)

 Writer.Write(me.This3Des.Encrypt(pObject.ToText))
 File.Close()
end sub

Dermed vil hele objektet være lagret som en tekst streng.

 

Når jeg åpner den igjen så vil jeg ha til noe slik:

Public sub OpenObject(ByRef pObject as SomeClass)
 dim File as IO.FileStream, Reader as IO.BinaryReader

 File = new IO.FileStream("TestFile.txt",IO.FileMode.Open)
 Reader = new IO-BinaryReader(File)

 dim LicenseRecord as new String = me.This3Des.Decrypt(Reader.ReadString)

 pObject = LicenseRecord.ToSomeClass

Og det er nettop den konverteringen fra og til et objekt som er utfordringen

 

Flere tips..

 

Ole

Lenke til kommentar

Koden og fremgangsmåten blir vel noe lik følgende:

Imports System.IO

Imports System.Text

Imports System.Runtime.Serialization

Imports System.Security.Cryptography

 

Public Class Form1

 

    Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click

 

        Dim oRecord As New ThisRecord, oInput As ThisRecord

 

        ' Initialiserer innhold (du bør for øvrig lage en constructor i klassen)

        With oRecord

            .Value1 = "Hallo verden!"

            .Value2 = 42

            .Value3 = Date.Now

        End With

 

        ' Initialiserer krypteringsalgoritmen vi vil benytte

        Dim oCryptic As New DESCryptoServiceProvider

        oCryptic.Key = ASCIIEncoding.ASCII.GetBytes("ABCDEFGH")

        oCryptic.IV = ASCIIEncoding.ASCII.GetBytes("ABCDEFGH")

 

        ' Lagrer posten

        SaveObject("C:\Test.dat", oRecord, oCryptic.CreateEncryptor)

 

        ' Laster den inn igjen

        oInput = LoadObject(Of ThisRecord)("C:\Test.dat", oCryptic.CreateDecryptor)

 

        Stop

 

    End Sub

 

    Public Sub SaveObject(Of T)(ByVal File As String, ByVal oElement As T)

        ' Skriver objektet til en gitt fil

        SaveObject(New FileStream(File, FileMode.Create), oElement)

    End Sub

 

    Public Sub SaveObject(Of T)(ByVal File As String, ByVal oElement As T, _

    ByVal Transform As ICryptoTransform)

        ' Krypterer objektet til en fil

        SaveObject(New CryptoStream(New FileStream(File, FileMode.Create), _

        Transform, CryptoStreamMode.Write), oElement)

    End Sub

 

    Public Sub SaveObject(Of T)(ByVal SourceStream As Stream, ByVal oElement As T)

        ' Serialiserer objektet i strømmen

        With New Formatters.Binary.BinaryFormatter

            .Serialize(SourceStream, oElement)

            SourceStream.Close()

        End With

    End Sub

 

    Public Function LoadObject(Of T)(ByVal File As String) As T

        ' Laster inn objektet fra en fil

        Return LoadObject(Of T)(New FileStream(File, FileMode.Open))

    End Function

 

    Public Function LoadObject(Of T)(ByVal File As String, ByVal Transform As ICryptoTransform) As T

        ' Krypterer objektet til en fil

        Return LoadObject(Of T)(New CryptoStream(New FileStream(File, FileMode.Open), _

        Transform, CryptoStreamMode.Read))

    End Function

 

    Public Function LoadObject(Of T)(ByVal SourceStream As Stream) As T

        ' Laster inn objektet fra strømmen

        With New Formatters.Binary.BinaryFormatter

            LoadObject = DirectCast(.Deserialize(SourceStream), T)

            SourceStream.Close()

        End With

    End Function

 

End Class

 

<Serializable()> _

Public Class ThisRecord

    Public Value1 As String

    Public Value2 As Long

    Public Value3 As Date

End Class

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...