Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Selbsterfundener Codier- oder Verschlüsselungdsalgorythmus mit Erklärung - VB.NET

Anleitung Entwicklung Visual Studio

Mitglied: mathe172

mathe172 (Level 1) - Jetzt verbinden

17.12.2010, aktualisiert 26.12.2010, 10801 Aufrufe, 9 Kommentare

Ich habe mich vor einiger Zeit entschlossen, ein Verschlüsselungssytem, das ich vor Jahren erfunden habe, in VB.net zu schreiben

Hallo zusammen!
Hier ist der Komplette Code mit Ver- und Entschlüsselungssub(Achtung: Der Code ist für ein UserForm gemacht, sollte sich aber leicht umändern lassen):

[EDIT: Der Code wurde durch eine neue Version mit verbesserter Erklärung, Aufteilung in Form- und Nutzcode,weniger globalen Variablen und einer kleinen Fehlerroutine ersetzt]

"FormCode":
01.
Public Class Form1 
02.
    'Variablen für Klar- und CodeText und Schlüssel 
03.
    Dim KText As String 
04.
    Dim CText As String 
05.
    Dim Key As String 
06.
    'Benutztes Alphabet; Zeichensatz 
07.
    Dim Alphabet As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz.,-_!?()^'äöü0123456789" 
08.
 
09.
    'Coder definieren 
10.
    Dim WithEvents Coder As New Coder(Alphabet) 
11.
    Private Sub Verschlüsseln_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Verschlüsseln.Click 
12.
        'Alles leeren 
13.
        Schlüssel.Text = "" 
14.
        Key = "" 
15.
        CodeText.Text = "" 
16.
        CText = "" 
17.
        'Überprüfen ob KlarText leer ist, wenn ja, Fehler melden, 
18.
        ' Fokus auf Klartext und Sub abbrechen 
19.
        If KlarText.Text <> "" Then 
20.
            KText = KlarText.Text 
21.
        Else 
22.
            MsgBox("Bitte Klartext eingeben.") 
23.
            KlarText.Focus() 
24.
            Exit Sub 
25.
        End If 
26.
        'Text mit Coder(-Funktionen) verschlüsseln 
27.
        CodeText.Text = Coder.Encrypt(KText) 
28.
        Schlüssel.Text = Coder.Key 
29.
        'Bei Fehler Ausgaben löschen 
30.
        If Fehler Then 
31.
            Fehler = False 
32.
            CodeText.Text = "Fehler aufgetreten" 
33.
            Schlüssel.Text = "Fehler aufgetreten" 
34.
        End If 
35.
    End Sub 
36.
 
37.
    Private Sub Entschlüsseln_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Entschlüsseln.Click 
38.
        'Alles leeren 
39.
        KlarText.Text = "" 
40.
        KText = "" 
41.
        'Überprüfen ob CodeText leer ist, wenn ja, Fehler melden, 
42.
        ' Fokus auf CodeText und Sub abbrechen 
43.
        If CodeText.Text <> "" Then 
44.
            CText = CodeText.Text 
45.
        Else 
46.
            MsgBox("Bitte Codetext eingeben.") 
47.
            CodeText.Focus() 
48.
            Exit Sub 
49.
        End If 
50.
        'Überprüfen ob Schlüssel leer ist, wenn ja, Fehler melden, 
51.
        ' Fokus auf Schlüssel und Sub abbrechen 
52.
        If Schlüssel.Text <> "" Then 
53.
            Key = Schlüssel.Text 
54.
        Else 
55.
            MsgBox("Bitte Schlüssel eingeben.") 
56.
            Schlüssel.Focus() 
57.
            Exit Sub 
58.
        End If 
59.
        'Text mit Coder(-Funktionen) entschlüsseln 
60.
        KlarText.Text = Coder.Decrypt(CText, Key) 
61.
        'Bei Fehler Ausgaben löschen 
62.
        If Fehler Then 
63.
            Fehler = False 
64.
            KlarText.Text = "Fehler aufgetreten" 
65.
        End If 
66.
    End Sub 
67.
 
68.
    'Variable die Anzeigt, ob Fehler aufgetreten ist 
69.
    Dim Fehler As Boolean 
70.
    Private Sub Coder_Fehler(ByVal ex As System.Exception, ByVal Location As String) Handles Coder.Fehler 
71.
        MsgBox("Fehler in Sub/Function " & Location & " :" & vbNewLine & "Fehler: " & vbNewLine & ex.Message) 
72.
        Fehler = True 
73.
    End Sub 
74.
End Class
"NutzCode":
01.
''' <summary> 
02.
''' Stellt Funktionen zum Ver- und Entschlüsseln von Texten in Stringformat bereit 
03.
''' </summary> 
04.
''' <remarks></remarks> 
05.
Public Class Coder 
06.
    Public Sub New() 
07.
    End Sub 
08.
    Public Sub New(ByVal Alphabet_ As String) 
09.
        _Alphabet = Alphabet_ 
10.
    End Sub 
11.
 
12.
    'Error Event 
13.
    Public Event Fehler(ByVal ex As Exception, ByVal Location As String) 
14.
 
15.
    'Variable für Schlüssel 
16.
    Dim _Key As String 
17.
    Public ReadOnly Property Key() As String 
18.
        Get 
19.
            Return _Key 
20.
        End Get 
21.
    End Property 
22.
 
23.
    'Benutztes Alphabet; Zeichensatz 
24.
    Private _Alphabet As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz.,-_!?()^'äöü0123456789" 
25.
    Public Property Alphabet() As String 
26.
        Get 
27.
            Return _Alphabet 
28.
        End Get 
29.
        Set(ByVal value As String) 
30.
            _Alphabet = value 
31.
        End Set 
32.
    End Property 
33.
 
34.
    Private Function AlphabeteErzeugen(ByVal Paare(,) As Byte) As String() 
35.
        Try 
36.
            'Variable für die Alphabete 
37.
            Dim Alphabete(Paare.Length / 2 - 1) As String 
38.
 
39.
            'Schleife für alle Alphabete ablaufen 
40.
            For i As Byte = 0 To Paare.Length / 2 - 1 
41.
                'Endscheiden ob das zum aktuellen Alphabet gehörende 
42.
                'a kleiner oder grösser als das b ist, und entsprechende Begrenzungen festlegen 
43.
                If Paare(i, 0) < Paare(i, 1) Then 
44.
                    Alphabete(i) = AKleinerB(Paare(i, 0), Paare(i, 1)) 
45.
                Else 
46.
                    Alphabete(i) = AGrösserB(Paare(i, 0), Paare(i, 1)) 
47.
                End If 
48.
            Next 
49.
            Return Alphabete 
50.
        Catch ex As Exception 
51.
            RaiseEvent Fehler(ex, "AlphabeteErzeugen") 
52.
            Return Nothing 
53.
        End Try 
54.
    End Function 
55.
 
56.
    'Begrenzungsfunkitonen, die die entsprechenden Begrenzungen in das Array Begrenzungen schreiben 
57.
    'und die Alphabetgenerierung starten, und deren generierte Alphabete zurückgeben 
58.
    'Was die Begrenzungen bedeuten, wird unten erklärt 
59.
    Private Function AKleinerB(ByVal a As Byte, ByVal b As Byte) 
60.
        Try 
61.
            'Array für die Begrenzungen und Schritte der Code-Alphabete 
62.
            Dim Begrenzungen(2, 2) As SByte 
63.
            Begrenzungen(0, 0) = b 
64.
            Begrenzungen(0, 1) = -1 
65.
            Begrenzungen(0, 2) = a + 1 
66.
            Begrenzungen(1, 0) = 1 
67.
            Begrenzungen(1, 1) = 1 
68.
            Begrenzungen(1, 2) = a 
69.
            Begrenzungen(2, 0) = _Alphabet.Length 
70.
            Begrenzungen(2, 1) = -1 
71.
            Begrenzungen(2, 2) = b + 1 
72.
            'Generiertes Alphabet zurückgeben 
73.
            Return AlphabetReihenfolge(Begrenzungen) 
74.
        Catch ex As Exception 
75.
            RaiseEvent Fehler(ex, "AKleinerB") 
76.
            Return Nothing 
77.
        End Try 
78.
    End Function 
79.
    Private Function AGrösserB(ByVal a As Byte, ByVal b As Byte) 
80.
        Try 
81.
            'Array für die Begrenzungen und Schritte der Code-Alphabete 
82.
            Dim Begrenzungen(2, 2) As SByte 
83.
            Begrenzungen(0, 0) = a + 1 
84.
            Begrenzungen(0, 1) = 1 
85.
            Begrenzungen(0, 2) = _Alphabet.Length 
86.
            Begrenzungen(1, 0) = b 
87.
            Begrenzungen(1, 1) = -1 
88.
            Begrenzungen(1, 2) = 1 
89.
            Begrenzungen(2, 0) = b + 1 
90.
            Begrenzungen(2, 1) = 1 
91.
            Begrenzungen(2, 2) = a - 1 
92.
            'Generiertes Alphabet zurückgeben 
93.
            Return AlphabetReihenfolge(Begrenzungen) 
94.
        Catch ex As Exception 
95.
            RaiseEvent Fehler(ex, "AGrösserB") 
96.
            Return Nothing 
97.
        End Try 
98.
    End Function 
99.
    'Funktion, die die Zeichen aus Alphabet in der richtigen Reihenfolgen in das Code-Alphabet einfügt 
100.
    Private Function AlphabetReihenfolge(ByVal Begrenzungen(,) As SByte) As String 
101.
        Try 
102.
            'Variable für das Alphabet 
103.
            Dim Alphabet As String = "" 
104.
 
105.
            'Variable, die anzeigt in welchem der drei Abschnitte eines Alphabets man sich befindet 
106.
            Dim Abschnitt As Byte = 0 'Startwert: Am Anfang ist man immer im ersten Abschnitt 
107.
 
108.
            'Variable, die anzeigt, das wievielte Zeichen gerade bearbeitet wird 
109.
            Dim Zeichen As Byte = Begrenzungen(0, 0) 'Startwert: Das Zeichen, mit dem man beginnt 
110.
 
111.
            'Variable, die bestimmt ob die Zeichen aus Alphabet in auf- oder absteigender  
112.
            'Reihenfolge behandelt werden 
113.
            Dim Schritt As SByte = Begrenzungen(0, 1) 'Startwert: Wert aus Begrenzungen 
114.
 
115.
            'Die nachfolgenden Schritte werden soviel mal ausgeführt, wie Alphabet lang ist 
116.
            For i As Byte = 0 To _Alphabet.Length - 1 
117.
 
118.
                'Das Zeichen an der Stelle Zeichen-1 aus dem "alten" Alphabet wird an das zu  
119.
                'bearbeitende Alphabet angefügt 
120.
                Alphabet &= _Alphabet.ElementAt(Zeichen - 1) 
121.
 
122.
                ' Prüfen, ob das gerade bearbeitete Zeichen das letzte eines Abschnitts ist 
123.
                If Zeichen = Begrenzungen(Abschnitt, 2) Then 
124.
 
125.
                    'Wenn der alte Abschnitt der letzte war, dann zu nächstem i springen 
126.
                    'Gleichbedeutend mit Exit for (nur in diesem Fall!) 
127.
                    If Abschnitt = 2 Then Continue For 
128.
 
129.
                    '(Sonst) Abschnitt um 1 erhöhen 
130.
                    Abschnitt += 1 
131.
 
132.
                    'Nächstes zu bearbeitende Zeichen mithilfe des Array Begrenzungen laden 
133.
                    Zeichen = Begrenzungen(Abschnitt, 0) 
134.
                    'Gleiches für Schritte 
135.
                    Schritt = Begrenzungen(Abschnitt, 1) 
136.
                Else 
137.
                    'Wenn kein neuer abschnitt beginnt, nächstes Zeichen entsprechend Schritt nehmen 
138.
                    Zeichen += Schritt 
139.
                End If 
140.
            Next 
141.
            Return Alphabet 
142.
        Catch ex As Exception 
143.
            RaiseEvent Fehler(ex, "AlphabetReihenfolge") 
144.
            Return Nothing 
145.
        End Try 
146.
    End Function 
147.
 
148.
    'Verschlüsselungsfunktion 
149.
    Public Function Encrypt(ByVal KText As String) 
150.
        Try 
151.
            Dim CText As String = "" 
152.
 
153.
            'Zufälligen Schlüssel errechnen und Alphabete erzeugen und die Alphabete speichern 
154.
            Dim Alphabete() As String = AlphabeteErzeugen(SchlüsselErzeugen(KText.Length)) 
155.
 
156.
            'Variable, die zeigt, welches Alphabet zur Verschlüsselung des nächsten Zeichen  
157.
            'verwendet wird 
158.
            Dim AlphabetNr As Byte = 0 'Startwert: Es wird immer mit dem ersten Alphabet begonnen 
159.
 
160.
            'Zu verschlüsselndes Zeichen 
161.
            Dim ToCodeChar As Char 
162.
 
163.
            'Schleife für jedes Zeichen in KText abarbeiten 
164.
            For i As Integer = 0 To KText.Length - 1 
165.
 
166.
                'Zu Codierendes Zeichen festlegen 
167.
                ToCodeChar = KText.ElementAt(i) 
168.
 
169.
                'Fehler wenn Zeichen nicht in Alphabet abfangen 
170.
                If Not _Alphabet.Contains(ToCodeChar) Then 
171.
                    RaiseEvent Fehler(New Exception("Zeichen nicht in Alphabet enthalten"), "Encrypt") 
172.
                    Return Nothing 
173.
                End If 
174.
 
175.
                'Codiertes Zeichen an CText anfügen 
176.
                CText &= Alphabete(AlphabetNr).ElementAt(_Alphabet.IndexOf(ToCodeChar)) 
177.
 
178.
                'Wenn das gerade verwendete Code-Alphabet nicht das letzte war, dann nächstes nehmen 
179.
                'Entspricht einer ModuloFunktion: 
180.
                AlphabetNr = (AlphabetNr + 1) Mod Alphabete.Count() 
181.
            Next 
182.
 
183.
            'Ergebnis zurückgeben 
184.
            Return CText 
185.
        Catch ex As Exception 
186.
            RaiseEvent Fehler(ex, "Encrypt") 
187.
            Return Nothing 
188.
        End Try 
189.
    End Function 
190.
    'Funktion die einen Schlüssel mit maximallänge berrechnet und die errechneten Paare zurückgibt 
191.
    Private Function SchlüsselErzeugen(ByVal MaxLength As Integer) As Byte(,) 
192.
        Try 
193.
            'Array für die Paare 
194.
            Dim Paare(8, 1) As Byte 
195.
 
196.
            'Grösster Wert der als Zahl für ein Paar genommen werden kann 
197.
            Dim Max As Byte = _Alphabet.Length 
198.
 
199.
            'Die beiden Zahlen eines Paars 
200.
            Dim a As Byte 
201.
            Dim b As Byte 
202.
 
203.
            'Anzahl der Paare: KTextlänge -1 aber kleiner als 10  
204.
            Dim AnzahlPaare As Byte = MaxLength 
205.
            If AnzahlPaare > 9 Then AnzahlPaare = 9 
206.
 
207.
            'Kette aller Zahlen, die für jedes Paare eine eindeutige (für jedes mögliche Paar  
208.
            'eine andere) aus a und b berechnet werden 
209.
            Dim Kombinationen As String = "" 
210.
 
211.
            'Kette aller Zeichenanzahlen der Kombinationen 
212.
            Dim KombinationenZeichen As String = "" 
213.
 
214.
            'Zufallsgenerator Initialisieren 
215.
            Randomize() 
216.
 
217.
            'Die Paare erzeugen 
218.
            For i As Byte = 0 To AnzahlPaare - 1 
219.
 
220.
                'Erste Zahl des Paars; zwischen 2 und max 
221.
                a = CByte(Int(2 + (Max - 2) * Rnd())) 
222.
 
223.
                'Zweite Zahl; Wenn gleich erste, dann neue Zahl nehmen 
224.
                Do 
225.
                    b = CByte(Int(2 + (Max - 2) * Rnd())) 
226.
                Loop Until a <> b 
227.
 
228.
                'a und b in Paare schreiben: 
229.
                Paare(i, 0) = a 
230.
                Paare(i, 1) = b 
231.
 
232.
                'Kombinationszahl aus a und b berechnen und an Kombinationen anfügen 
233.
                'Zur Erklärung siehe ganz am Ende des Codes 
234.
                Kombinationen = Kombinationen & (a - 1) * Max + b 
235.
                'Anzahl Zeichen der neuen Kombination an KombinationenZeichen 
236.
                KombinationenZeichen &= Str((a - 1) * Max + b).Length - 1 
237.
            Next 
238.
 
239.
            'Kombinationen und KombinationenZeichen zusammenfügen 
240.
            _Key = Kombinationen & KombinationenZeichen 
241.
            'Letzte Zeichenkettenlänge abschneiden und AnzahlPaare anfügen 
242.
            _Key = Microsoft.VisualBasic.Left(_Key, _Key.Length - 1) & AnzahlPaare 
243.
            Return Paare 
244.
        Catch ex As Exception 
245.
            RaiseEvent Fehler(ex, "SchlüsselErzeugen") 
246.
            Return Nothing 
247.
        End Try 
248.
    End Function 
249.
 
250.
    'Enschlüsselungsfunktion 
251.
    Public Function Decrypt(ByVal CText As String, ByVal Key_ As String) As String 
252.
        Try 
253.
            'Schlüssel in Schlüsselvariable speichern 
254.
            _Key = Key_ 
255.
 
256.
            Dim KText As String = "" 
257.
 
258.
            'Paare ausrechnen und Alphabete erzeugen und Alphabete in Variable speichern 
259.
            Dim Alphabete As String() = AlphabeteErzeugen(ErrechnePaare()) 
260.
 
261.
            'Variable, die zeigt, welches Alphabet zur Verschlüsselung des nächsten Zeichen  
262.
            'verwendet wird 
263.
 
264.
            Dim AlphabetNr As Byte = 0 'Startwert: Es wird immer mit dem ersten Alphabet begonnen 
265.
 
266.
            'Zu verschlüsselndes Zeichen 
267.
            Dim ToDecodeChar As Char 
268.
 
269.
            'Schleife für jedes Zeichen in KText abarbeiten 
270.
            For i As Integer = 0 To CText.Length - 1 
271.
                'Zu Codierendes Zeichen festlegen 
272.
                ToDecodeChar = CText.ElementAt(i) 
273.
                'Codiertes Zeichen an CText anfügen 
274.
                KText &= _Alphabet.ElementAt(Alphabete(AlphabetNr).IndexOf(ToDecodeChar)) 
275.
                'Wenn das gerade verwendete Code-Alphabet nicht das letzte war, dann nächstes nehmen 
276.
                'Entspricht einer ModuloFunktion: 
277.
                AlphabetNr = (AlphabetNr + 1) Mod Alphabete.Count 
278.
            Next 
279.
 
280.
            'Ergebnis zurückgeben 
281.
            Return KText 
282.
        Catch ex As Exception 
283.
            RaiseEvent Fehler(ex, "Decrypt") 
284.
            Return Nothing 
285.
        End Try 
286.
    End Function 
287.
    'Funktion die aus dem Schlüssel die Paare zurückgewinnt 
288.
    Private Function ErrechnePaare() As Byte(,) 
289.
        Try 
290.
            'Variable für die Anzahl der Alphabete 
291.
            Dim AnzahlAlphabete As Byte = CByte(CStr(_Key.Last)) 
292.
 
293.
            'Variable, die am Schluss zurückgegeben wird 
294.
            Dim Paare(AnzahlAlphabete - 1, 1) As Byte 
295.
 
296.
            'In dieser Variable steht der Teil des Schlüssels, der die Zeichenanzahlen der 
297.
            'Paarkombinationen enthält. Dabei steht in AnzahlAlphabete das letzte Zeichen  
298.
            'des Schlüssels. Dies sagt wieviele Paare man braucht. Da im Schlüssel die Zeichen- 
299.
            'zahl des letzten fehlt, kann man die Zahl ohne Umrechnug nehmen 
300.
            Dim PaareZeichen As String = Microsoft.VisualBasic.Right(_Key, AnzahlAlphabete) 
301.
 
302.
            'Das letzte Zeichen, das das die Paaranzahl enthält, wird Abgeschnitten 
303.
            PaareZeichen = Microsoft.VisualBasic.Left(PaareZeichen, AnzahlAlphabete - 1) 
304.
 
305.
            'Diese Variable enthält den Teil des Schlüssels, der die zusammengefügten Paarkomb- 
306.
            'binationen enthält. Das ist alles bis auf den Teil, der in PaareZeichen steht 
307.
            Dim Bearbeit_Key As String = Microsoft.VisualBasic.Left(_Key, _Key.Length - AnzahlAlphabete) 
308.
 
309.
            'Hier wird die Kombinationszahl des gerade bearbeitenden Paares gespeichert 
310.
            Dim PaarKombiniert As Integer 
311.
 
312.
            'Schleife wird für jedes Paar abgearbeitet 
313.
            For i As Byte = 0 To AnzahlAlphabete - 1 
314.
 
315.
                'Wenn nicht das letzte Paar bearbeitet wird... 
316.
                If i < AnzahlAlphabete - 1 Then 
317.
                    '...dann die entsprechende Anzahl Zeichen (steht in PaareZeichen an i-ter stelle) 
318.
                    ' von Bearbeit_Key abschneiden und in PaarKombiniert schreiben. 
319.
                    PaarKombiniert = Microsoft.VisualBasic.Left( _ 
320.
                        Bearbeit_Key, Microsoft.VisualBasic.Val(PaareZeichen.ElementAt(i))) 
321.
 
322.
                    'Der Teil der in PaarKombiniert steht, von Bearbeit_Key abschneiden 
323.
                    Bearbeit_Key = Microsoft.VisualBasic.Right(Bearbeit_Key, _ 
324.
                                Bearbeit_Key.Length - CStr(PaarKombiniert).Length) 
325.
                Else 
326.
                    '...Sonst den Bearbeit_Key in PaarKombiniert laden, da die Zeichenanzahl nicht in 
327.
                    'PaareZeichen steht (wurde bei der SChlüsselerzeugung abgeschnitten). Der Rest 
328.
                    'ist aber sowieso das was man noch braucht 
329.
                    PaarKombiniert = Bearbeit_Key 
330.
                End If 
331.
 
332.
                'Erklärung zur Berechnung siehe ganz am Ende des Codes 
333.
                Paare(i, 0) = Int(PaarKombiniert / (_Alphabet.Length)) + 1 
334.
                Paare(i, 1) = PaarKombiniert - (_Alphabet.Length) * (Paare(i, 0) - 1) 
335.
            Next 
336.
            Return Paare 
337.
        Catch ex As Exception 
338.
            RaiseEvent Fehler(ex, "ErrechnePaare") 
339.
            Return Nothing 
340.
        End Try 
341.
    End Function 
342.
End Class 
343.
 
344.
'Erklärung zum Aufbau der Alphabete 
345.
'der Einfachheit halber wird hier das Grundalphabet "ABCDEFGHIJ" benutzt 
346.
347.
'Jedes aus dem Grundalphabet generierte Alphabet lässt sich mit zwei Zahlen (a und b) definieren: 
348.
'Wenn a kleiner b, dann sieht der Aufbau so aus: 
349.
'z.B.: (a=4,b=8) 
350.
'A B C D|E F G H|I J 
351.
'       a       b 
352.
'------>|<------|<-- 
353.
'   2.      1.    3. 
354.
'-->Das Alphabet wir din 3 Teile geteilt (an den Stellen nach dem a-ten und b-ten Zeichen) 
355.
'Diese Stücke werden dann in der oben genannten Richtung und Reihenfolge abgearbeitet: 
356.
'H G F E|A B C D|J I 
357.
'   1.      2.    3. 
358.
 
359.
'Ähnliches für a grösser b: 
360.
'z.B.: (a=7,b=3) 
361.
'A B C|D E F G|H I J 
362.
'     b       a 
363.
'<----|------>|----> 
364.
'  2.     3.     1. 
365.
'--> 
366.
'H I J|C B A|D E F G 
367.
'  1.    2.     3. 
368.
369.
370.
'Erklärung zum Begrenzungsarry: 
371.
'Hier drin werden die Begrenzungen der 3 Teilstücke abgespeichert, und zwar nach folgendem Schema: 
372.
'Beg(x,0):Start des x-ten Teils 
373.
'Beg(x,1):Richtung des x-ten Teils (-1,+1) 
374.
'Beg(x,2):Ende des x-ten Teils 
375.
376.
377.
'Erklärung zur Berechnug Paarkombination aus Paar und Umgekehrt: 
378.
379.
'Man sollte sich eine quadratische Tabelle mit der Anzahl Reihen und Spalten vorstellen, 
380.
'wie das benutzte Alphabet Buchstaben hat. Der Einfachheit halber wird hier eine 10x10 Tabelle 
381.
'benutzt. 
382.
'Bsp: (a und b sind nacher die Zahlen aus denen das Paar besteht) 
383.
384.
' 1  2  3  4  5  6  7  8  9  10 
385.
' 11 12 13 14 15 16 17 18 19 20  
386.
' 21 22 23 24 25 26 27 28 29 30 
387.
' 31 32 33 34 35 36 37 38 39 40 
388.
' 41 42 43 44 45 46 47 48 49 50 
389.
' 51 52 53 54 55 56 57 58 59 60 
390.
' 61 62 63 64 65 66 67 68 69 70 
391.
' 71 72 73 74 75 76 77 78 79 80 
392.
' 81 82 83 84 85 86 87 88 89 90 
393.
' 91 92 93 94 95 96 97 98 99 100 
394.
 
395.
'Die Felder werden von links nach rechts und von oben nach unten durchnummeriert. 
396.
'Wenn man sich a als Spalten- und b als Zeilenindex vorstellt, die beide in einem Bereich 
397.
'zwischen 1 und 5 (grösse der Tabelle) liegen, so sieht man, dass die Zehnerstelle dem a und 
398.
'die Einerstelle dem b entspricht. Die Zehnerstelle lässt sich also so berechnen: a-1 
399.
'Die Einerstelle ist einfach b. Zusammen hiesse das: Zehnerstelle*10 + Einerstelle. 
400.
'Setzt man nun ein, so entsteht (a-1)*10+b. Das *10 lässt sich durch *Alphabetlänge ersetzen. 
401.
'Dann hat man die im Code verwendete Formel ((a-1)*Alphabet.Length-1)+b. Das -1 kommt vom 
402.
'Index, der bei 0 oder 1 beginnt. 
403.
404.
'Die Umkehrung sollte sich nach etwas Überlegen selbst erklären. Die Formeln sind, um sie nicht 
405.
'suchen zu müssen, hier nochmal hingeschrieben: 
406.
'a = Int(Paar / Alphabet.Length 
407.
'b = Paar - (a - 1) * Alphabet.Length 
408.
'Abgeändert auf das 10*10 Feld: 
409.
'a = Int((Paar - 1) / 10 ; Das - 1 nach Paar kommt davon, dass b im Beispiel 10 (Breite 
410.
'der Tabelle) sein kann, im Code jedoch nicht. 
411.
'b = Paar - (a-1) * 10
Das hier ist noch der Code der Sub "NEW": (Mit Variabledeklaration)
01.
   Private Sub New() 
02.
        Me.KlarText = New System.Windows.Forms.TextBox() 
03.
        Me.CodeText = New System.Windows.Forms.TextBox() 
04.
        Me.Entschlüsseln = New System.Windows.Forms.Button() 
05.
        Me.Verschlüsseln = New System.Windows.Forms.Button() 
06.
        Me.Schlüssel = New System.Windows.Forms.TextBox() 
07.
        Me.Label1 = New System.Windows.Forms.Label() 
08.
        Me.Label2 = New System.Windows.Forms.Label() 
09.
        Me.Label3 = New System.Windows.Forms.Label() 
10.
        Me.SuspendLayout() 
11.
12.
        'KlarText 
13.
14.
        Me.KlarText.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!) 
15.
        Me.KlarText.Location = New System.Drawing.Point(57, 13) 
16.
        Me.KlarText.Name = "KlarText" 
17.
        Me.KlarText.Size = New System.Drawing.Size(380, 20) 
18.
        Me.KlarText.TabIndex = 0 
19.
20.
        'CodeText 
21.
22.
        Me.CodeText.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!) 
23.
        Me.CodeText.Location = New System.Drawing.Point(57, 40) 
24.
        Me.CodeText.Name = "CodeText" 
25.
        Me.CodeText.Size = New System.Drawing.Size(380, 20) 
26.
        Me.CodeText.TabIndex = 1 
27.
28.
        'Entschlüsseln 
29.
30.
        Me.Entschlüsseln.Location = New System.Drawing.Point(227, 93) 
31.
        Me.Entschlüsseln.Name = "Entschlüsseln" 
32.
        Me.Entschlüsseln.Size = New System.Drawing.Size(210, 23) 
33.
        Me.Entschlüsseln.TabIndex = 2 
34.
        Me.Entschlüsseln.Text = "Entschlüsseln" 
35.
        Me.Entschlüsseln.UseVisualStyleBackColor = True 
36.
37.
        'Verschlüsseln 
38.
39.
        Me.Verschlüsseln.Location = New System.Drawing.Point(16, 93) 
40.
        Me.Verschlüsseln.Name = "Verschlüsseln" 
41.
        Me.Verschlüsseln.Size = New System.Drawing.Size(209, 23) 
42.
        Me.Verschlüsseln.TabIndex = 3 
43.
        Me.Verschlüsseln.Text = "Verschlüsseln" 
44.
        Me.Verschlüsseln.UseVisualStyleBackColor = True 
45.
46.
        'Schlüssel 
47.
48.
        Me.Schlüssel.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!) 
49.
        Me.Schlüssel.Location = New System.Drawing.Point(74, 67) 
50.
        Me.Schlüssel.Name = "Schlüssel" 
51.
        Me.Schlüssel.Size = New System.Drawing.Size(363, 20) 
52.
        Me.Schlüssel.TabIndex = 4 
53.
54.
        'Label1 
55.
56.
        Me.Label1.AutoSize = True 
57.
        Me.Label1.Location = New System.Drawing.Point(13, 19) 
58.
        Me.Label1.Name = "Label1" 
59.
        Me.Label1.Size = New System.Drawing.Size(38, 13) 
60.
        Me.Label1.TabIndex = 5 
61.
        Me.Label1.Text = "KText:" 
62.
63.
        'Label2 
64.
65.
        Me.Label2.AutoSize = True 
66.
        Me.Label2.Location = New System.Drawing.Point(13, 43) 
67.
        Me.Label2.Name = "Label2" 
68.
        Me.Label2.Size = New System.Drawing.Size(38, 13) 
69.
        Me.Label2.TabIndex = 6 
70.
        Me.Label2.Text = "CText:" 
71.
72.
        'Label3 
73.
74.
        Me.Label3.AutoSize = True 
75.
        Me.Label3.Location = New System.Drawing.Point(13, 70) 
76.
        Me.Label3.Name = "Label3" 
77.
        Me.Label3.Size = New System.Drawing.Size(55, 13) 
78.
        Me.Label3.TabIndex = 7 
79.
        Me.Label3.Text = "Schlüssel:" 
80.
81.
        'Form1 
82.
83.
        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) 
84.
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font 
85.
        Me.ClientSize = New System.Drawing.Size(449, 128) 
86.
        Me.Controls.Add(Me.Label3) 
87.
        Me.Controls.Add(Me.Label2) 
88.
        Me.Controls.Add(Me.Label1) 
89.
        Me.Controls.Add(Me.Schlüssel) 
90.
        Me.Controls.Add(Me.Verschlüsseln) 
91.
        Me.Controls.Add(Me.Entschlüsseln) 
92.
        Me.Controls.Add(Me.CodeText) 
93.
        Me.Controls.Add(Me.KlarText) 
94.
        Me.Name = "Form1" 
95.
        Me.Text = "Codierung" 
96.
        Me.ResumeLayout(False) 
97.
        Me.PerformLayout() 
98.
 
99.
    End Sub 
100.
    Friend WithEvents KlarText As System.Windows.Forms.TextBox 
101.
    Friend WithEvents CodeText As System.Windows.Forms.TextBox 
102.
    Friend WithEvents Entschlüsseln As System.Windows.Forms.Button 
103.
    Friend WithEvents Verschlüsseln As System.Windows.Forms.Button 
104.
    Friend WithEvents Schlüssel As System.Windows.Forms.TextBox 
105.
    Friend WithEvents Label1 As System.Windows.Forms.Label 
106.
    Friend WithEvents Label2 As System.Windows.Forms.Label 
107.
    Friend WithEvents Label3 As System.Windows.Forms.Label
[EDIT: Der Code sollte ausreichend kommentiert sein, Erklärungen zum System sind unten im NutzCode, wenn zu weng, bitte nachfragen]

Ich hoffe es ist verständlich und hat keine Fehler!-Wenn doch, schreibt bitte einen Kommentar

Der Code ist hauptsächlich zu Übungszwecken im Umgang mit VB.NET gedacht. (ICh hab auch keine Ahnung, wie sicher die Verschlüsselung ist )

Wenn ihr Verbesserungsvorschläge habt, bitte postet sie

Mathe172
Mitglied: SlainteMhath
20.12.2010 um 17:12 Uhr
Moin,

Der Code ist hauptsächlich zu Übungszwecken im Umgang mit VB.NET gedacht.
Also der Code mag zwar funktionieren, aber schön ist er nicht.

Ich hoffe es ist verständlich [...]

Nein ist er nicht, weil:
- Du benutzt nur Subs, Variablen sind global definiert und werden nicht explizit übergeben bzw zurück gegeben.
- Form und "Nutzcode" sind kaum trennbar. Der Code der die Arbeit macht solle in ein eigenes Modul, besser noch in einen eigene Klasse,
- Fehlerbehandlung (Try...catch) fehlt völlig.

Dadruch ist der Code sehr schwer zu lesen.

ICh hab auch keine Ahnung, wie sicher die Verschlüsselung ist
Ich auch nicht

schreibt bitte einen Kommentar
Ist hiermit geschehen

lg
Slainte
Bitte warten ..
Mitglied: mathe172
22.12.2010 um 14:10 Uhr
@SlainteMhath:
Du benutzt nur Subs, Variablen sind global definiert und werden nicht explizit übergeben bzw zurück gegeben.

Wie meinst du das genau? Soll ich alles mit Byref und Byval machen?

Form und "Nutzcode" sind kaum trennbar. Der Code der die Arbeit macht solle in ein eigenes Modul, besser noch in einen eigene Klasse,

Werde ich nachholen

Fehlerbehandlung (Try...catch) fehlt völlig.

Mache ich danach... Leider hab ich damit noch nicht soviel erfahrung, aber ich werds versuchen

Mathe172
Bitte warten ..
Mitglied: laster
23.12.2010 um 15:50 Uhr
Hallo,
bei 421 Zeilen Code (inkl. Kommentare) sollte man schon mal in einigen Sätzen beschreiben, wie das System funktioniert. Dann könnte ich entscheiden, ob ich den Code nutze oder nicht...

ein schönes Weihnachtsfest

LS
Bitte warten ..
Mitglied: mathe172
23.12.2010 um 17:13 Uhr
@laster:
Meiner Meinung nach ist das System im Code selbst ziehmlich ausfühlich erklärt...
Aber wie SlainteMhath gesagt hat (zurecht) ist der code noch nicht wirklich lesbar. Ich hoffe ich finde demnächst die Zeit, das auszubessern.

Mathe172
Bitte warten ..
Mitglied: mathe172
23.12.2010 um 21:56 Uhr
So jetzt sollte der Code besser sein.
  • Ich habe eine kleine Fehlerbehandlungsroutine eingebaut (ich weiss sie ist WINZIG , aber ich habe ehrlich gesagt keine wirkliche Ahnung davon ***schäm***)
  • Ich habe den "Nutzcode" in eine eigene Klasse getan
  • Ich habe das System ein bisschen besser erklärt
  • Nur noch eine globale Variable im Nutzcode (Key as String), habe aber keine Ahnung wie ich die ohne viel aufwand wegkriege
  • Ich habe noch ein paar kleinere Verschönerungen gemacht

Schöne Weihnachten,

Mathe172
P.S.:@SlainteMhath: Ich hoffe es gefällt dir jetzt besser
Bitte warten ..
Mitglied: cosphi
26.12.2010 um 17:29 Uhr
Der Code ist hauptsächlich zu Übungszwecken im Umgang mit VB.NET gedacht. (ICh hab auch keine Ahnung, wie sicher die
Verschlüsselung ist )

Wenn es sicher sein soll, würde ich mich auf sowas niemals verlassen. Zugegeben, ích hab mir deinen Algorithmus nicht genauer angesehen aber ich gehe zu 100% davon aus dass er unsicher ist.
Bitte warten ..
Mitglied: mathe172
26.12.2010 um 17:36 Uhr
Hallo cosphi!

aber ich gehe zu 100% davon aus dass er unsicher ist.
Könntest du mir vielleicht sagen wieso? Vielleicht kann ich ihn ja ändern.

Mathe172
Bitte warten ..
Mitglied: darnitiger
27.12.2010 um 17:17 Uhr
sieht recht wirr aus... jedoch sage ich immer was funktioniert kann SO FALSCH auch nicht sein ;)
Bitte warten ..
Mitglied: lowbyte1
25.01.2011 um 20:16 Uhr
1. Der Algorithmus ist zu 100% unsicher! (Denn so wie du ja geschrieben hast weist du nicht ob er sicher ist oder nicht).
2. Sollte mann eine Menge verstehen von Kryptographie, Mathematik ,Protokollen etc... (und dass ist hier leider nicht der Fall).
3. Sollte mann für die Implementierung eine geeignete Programmiersprache wählen. Denn mit vb.net (sterbens langsam).
4. Ensteht so ein Algorithmus zuerst auf dem Papier. Danach wird zbsp. in (meistens) C implementiert, und optimiert... und danach kommt immer ein Paper!
5. Wenn du Programmieren lernen willst such dir eine anderes Gebiet, als Crypto-Progrämmchen zu schreiben die sowiso nichts Wert sind, sorry!
6. Wenn du dich aber intressierts für Algorithmen, Crypto ,Verfahren etc. Dann empfehle ich dir ein Buch zu kaufen. zbsp.

Angewandte Kryptographie - Der Klassiker. Protokolle, Algorithmen und Sourcecode in C.
http://www.amazon.de/Angewandte-Kryptographie-Klassiker-Protokolle-Algo ...

oder Dich mal im Netz umschauen... denn es gibt genug sources.
oder schau mal hier. Eine Seite von mir im Aufbau... dort findest du den blockverschlüsselungs Algorithmus SPC23. Kannst ja mal reinschauen.

XOR - BASE
http://vpn23.homelinux.org
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Visual Studio
gelöst VB.Net - Problem mit Umleitung der Standard-Ausgabe (4)

Frage von emeriks zum Thema Visual Studio ...

Visual Studio
gelöst Vb.net Pfadangabe mit Wildcards wie Stern Regex Pattern (2)

Frage von Pilger83 zum Thema Visual Studio ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...