Benutzer mit den meisten Antworten
Arrayliste auf Platte schreiben/lesen

Frage
-
Hallo User,
Ich habe eine ArrayList mit schlichter Struktur,
die ich gern verschlüsselt in eine Datei schreiben
und dann auch wieder decodiert auslesen möchte.
Public oVorrat() as oAdresse 'vorhanden
Public Class oAdresse
Public A As String
Public B As String
Public C As String
...
End Class
Private Sub Blabla
Dim oListe As New ArrayList
For Each oLine as oAdresse In oVorrat
oListe.add(oLine)
Next oLine
End Sub
"oListe" möchte ich nun, so rasant und
schnell wie möglich in einen File schreiben
und lese.
Wer hat einen guten Tip bzw. Link für mich?
Rudi
Antworten
-
Hallo Rudi und Markus,auf meiner Homepage unter<Tipps und Tricks - informtools - Tipp 174>habe ich Beispiele für das verschlüsselte Ablegen z.B. eines XML-Streams als Ergebnis einer Serialisierung.--
Viele Gruesse
Peter- Als Antwort vorgeschlagen Robert BreitenhoferModerator Mittwoch, 15. Februar 2012 11:49
- Als Antwort markiert Robert BreitenhoferModerator Montag, 20. Februar 2012 11:44
Alle Antworten
-
Hallo Rudi,
vielleicht sind die Methoden Serialize und Deserialize der BinaryFormatter Klasse hilfreich. Allerdings habe ich hier keine Möglichkeit einer Verschlüsselungsoption gesehen.
Daher wurde die Klasse oAdresse um die Methoden Verschluesseln und Entschluesseln erweitert welche vor und nach dem Serialisieren aufgerufen werden.
Eine Anweisung die einen String verschlüsselt etwa wie String1 = Encrypt(String1, Passwort) habe ich in .Net nicht gefunden. Bei dem was ich noch zum Verschlüsseln gefunden habe kam die Fehlermeldung das die und die Microsoft Klassen nicht serialisierbar seien.Daher eine Stringverschlüsselungsfunktion aus dem Netz verwendet und angepasst. Die Verschlüsselung verändert. Ich weiss dass diese einfach und vielleicht recht unsicher ist. Ist sie das in unterer Form wirklich? Falls ja warum?
Fragen wären: Gibt es eine Verschlüsselungsoption bei der Verwendung des BinaryFormatters und/oder der FileStream Klasse?Und wie ist String1 = Encrypt(String1, Passwort) am einfachsten sinngemäss zu realisieren? (Es geht darum einfach nur einen String zu verschlüsseln.) Auch in Verbindung mit der Verwendung des BinaryFormatters.
Option Compare Binary
Grüße
Markus
Imports System.Runtime.Serialization.Formatters.Binary
Imports System.IO
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim oListe As New ArrayList
Dim oVorrat As oAdresse
' Gleiche Strings sollen anders verschlüsselt werden.
For i As Integer = 1 To 200
oVorrat = New oAdresse("6Z Und Hier haben wir ganze Sätze. 1 > 0123.", _
"6Z", _
"6Z")
oListe.Add(oVorrat)
Next
Dim fs As New FileStream("DataFile.dat", FileMode.Create)
' Construct a BinaryFormatter and use it to serialize the data to the stream.
Dim formatter As New BinaryFormatter
' Verschlüsseln.
For Each oVorrat In oListe
oVorrat.Verschluesseln()
Next
' Speichern.
formatter.Serialize(fs, oListe)
fs.Close()
' Zur Probe leeren.
oListe.Clear()
oListe = Nothing
' Und wieder füllen.
' Lesen.
' Open the file containing the data that you want to deserialize.
fs = New FileStream("DataFile.dat", FileMode.Open)
oListe = DirectCast(formatter.Deserialize(fs), ArrayList)
' Entschlüsseln.
For Each oVorrat In oListe
oVorrat.Entschluesseln()
Next
fs.Close()
End Sub
End Class
<Serializable()>
Public Class oAdresse
Public A As String
Public B As String
Public C As String
Private mobjEncrypter_Decrypter As New String_Encrypter
Public Sub New(ByVal pA As String, _
ByVal pB As String, _
ByVal pC As String)
A = pA
B = pB
C = pC
End Sub
Public Sub Verschluesseln()
' Nehmen wir an nur A und B müssen verschlüsselt werden.
A = mobjEncrypter_Decrypter.String_Verschluesseln(A)
' B = mobjEncrypter_Decrypter.String_Verschluesseln(B)
' C = mobjEncrypter_Decrypter.String_Verschluesseln(C)
End Sub
Public Sub Entschluesseln()
' Nehmen wir an nur A und B müssen entschlüsselt werden.
A = mobjEncrypter_Decrypter.String_Entschluesseln(A)
' B = mobjEncrypter_Decrypter.String_Entschluesseln(B)
' C = mobjEncrypter_Decrypter.String_Entschluesseln(C)
End Sub
End Class
<Serializable()>
Public Class String_Encrypter
' Mit google nach
' string verschlüsselung vb.net 2010 gesucht.
' Folgendes genommen und dann angepasst.
' http://marco.seaside-graphics.de/programmierung/vb_net/vb-net-einfache-textverschlusselung-durch-zeichenverschiebung-nach-casar
' zwei integer-variablen, um sich die position bei der verschiebung zu merken
Dim MyOldPosition, MyNewPosition As Integer
' Reihenfolge ist geändert damit es nicht so einfach ist es zu entschlüsseln.
Dim MyAlphabet As String = "c.abed;if hg,1jlk:mn2/p3o\qr=4svut5!wx%y6(zBA)7C?DF8GEI9JHLK0MONQPSRTUVZYWX"
' Es geht vor in diesen Schritten.
Dim MyRotation() As Integer = {11, 2, 8, 3, 9, 15, 1, 4, 5}
' Und so wird es zur Sicherung gespeichert.
' Der Index des Zeichens hier ist der Index von MyRotation.
Dim MyRoatation_String() As String = {"e", "B", "S", "h", "k", "L", "M", "a", "i"}
' Damit gleiche Strings verschieden verschlüsselt werden muss
' diese Variable shared sein.
Shared gMyRotation_String_Index As Integer = 0
Dim x As Integer
Public Function String_Verschluesseln(ByVal pString As String) As String
Dim strNew As String = ""
Dim intRotationFirst As Integer
intRotationFirst = gMyRotation_String_Index
For x = 0 To pString.Length - 1
MyOldPosition = MyAlphabet.IndexOf(pString.ElementAt(x))
If MyOldPosition = -1 Then
strNew += pString.ElementAt(x)
Else
MyNewPosition = (MyOldPosition + MyRotation(gMyRotation_String_Index)) Mod MyAlphabet.Length
strNew += MyAlphabet.ElementAt(MyNewPosition)
End If
gMyRotation_String_Index = gMyRotation_String_Index + 1
If gMyRotation_String_Index > MyRotation.GetUpperBound(0) Then
gMyRotation_String_Index = 0
End If
Next
' Startrotation als letzes Zeichen im String hinzufügen.
strNew = strNew & MyRoatation_String(intRotationFirst)
Return strNew
End Function
Public Function String_Entschluesseln(ByVal pString As String) As String
Dim strNew As String = ""
' Startrotation ist letztes Zeichen im String.
Dim str0 As String = pString.ElementAt(pString.Length - 1)
pString = pString.Remove(pString.Length - 1, 1)
gMyRotation_String_Index = MyRoatation_String.IndexOf(MyRoatation_String, str0)
For x = 0 To pString.Length - 1
MyOldPosition = MyAlphabet.IndexOf(pString.ElementAt(x))
If MyOldPosition = -1 Then
strNew += pString.ElementAt(x)
Else
MyNewPosition = (MyOldPosition + MyAlphabet.Length - MyRotation(gMyRotation_String_Index)) Mod MyAlphabet.Length
strNew += MyAlphabet.ElementAt(MyNewPosition)
End If
gMyRotation_String_Index = gMyRotation_String_Index + 1
If gMyRotation_String_Index > MyRotation.GetUpperBound(0) Then
gMyRotation_String_Index = 0
End If
Next
Return strNew
End Function
End Class
- Bearbeitet Markus222 Samstag, 11. Februar 2012 23:34
-
Hallo Rudi und Markus,auf meiner Homepage unter<Tipps und Tricks - informtools - Tipp 174>habe ich Beispiele für das verschlüsselte Ablegen z.B. eines XML-Streams als Ergebnis einer Serialisierung.--
Viele Gruesse
Peter- Als Antwort vorgeschlagen Robert BreitenhoferModerator Mittwoch, 15. Februar 2012 11:49
- Als Antwort markiert Robert BreitenhoferModerator Montag, 20. Februar 2012 11:44
-
Hallo Rudi Remmiz,
Hat Dir die Antwort geholfen?
Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können. -
Hallo Rudi Remmiz,
Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.- Als Antwort markiert Rudi Remmiz Montag, 14. Mai 2012 08:36
- Tag als Antwort aufgehoben Robert BreitenhoferModerator Montag, 14. Mai 2012 13:15