Selbsterfundener Codier- oder Verschlüsselungdsalgorythmus mit Erklärung - VB.NET
17.12.2010
22:43:38 Uhr5210 Aufrufe
9 Antworten
22:43:38 Uhr
9 Antworten
Noch nicht bewertet
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":
"NutzCode":
Das hier ist noch der Code der Sub "NEW": (Mit Variabledeklaration)
[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
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) * 10Das 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
SlainteMhath schreibt am 20.12.2010 um 17:12:29 Uhr
Moin,
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.


lg
Slainte
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
mathe172 schreibt am 22.12.2010 um 14:10:06 Uhr
@SlainteMhath:
Wie meinst du das genau? Soll ich alles mit Byref und Byval machen?
Werde ich nachholen
Mache ich danach... Leider hab ich damit noch nicht soviel erfahrung, aber ich werds versuchen
Mathe172
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
mathe172 schreibt am 23.12.2010 um 21:56:45 Uhr
So jetzt sollte der Code besser sein.
Schöne Weihnachten,
Mathe172
P.S.:@SlainteMhath: Ich hoffe es gefällt dir jetzt besser
- 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
cosphi schreibt am 26.12.2010 um 17:29:49 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
)
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.
darnitiger schreibt am 27.12.2010 um 17:17:26 Uhr
sieht recht wirr aus... jedoch sage ich immer was funktioniert kann SO FALSCH auch nicht sein ;)
lowbyte1 schreibt am 25.01.2011 um 20:16:13 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-Kryptogra ...
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
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-Kryptogra ...
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









