Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
588to592
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
588to592
588to592
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Vigenère Veschlüsselung per VBA

Vigenère Veschlüsselung per VBA
27.03.2005 20:37:06
Reinhard
Hallo Wissende,
angeregt durch https://www.herber.de/forum/messages/590920.html
habe ich das Verschlüsseln mit vba umgesetzt. Klappt auch wunderbar *freu*, nur, wenn ein Leerzeichen im zu verschlüsselnden Text auftaucht klappt es ab der Stelle nicht mehr :-(
Habe jetzt da die ganze Zeit drangesessen und blicke das nicht mehr.
Kann jemand den Fehler orten der bei einem Leerzzeichen auftritt?
Vielleicht müsste man sowieso grundsätzlich das Lerzeichen mit in abc einbauen, damit im codierten Text nicht mehr die originale Wortlänge erkennbar ist.
Danke
Gruß
Reinhard

Option Explicit
Option Base 1
Function Verschlüsseln(ByVal Wort As String, ByVal Vergl As String) As String
'Text-Verschlüssung nach Vigenère
Dim n As Long, pos As Integer
Const abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
Vergl = UCase(Vergl)
Wort = UCase(Wort)
For n = 1 To Len(Wort)
If Mid(UCase(Wort), n, 1) <> " " Then
pos = IIf(n Mod Len(Vergl) <> 0, n Mod Len(Vergl), Len(Vergl))
Verschlüsseln = Verschlüsseln & Mid(abc, Asc(Mid(Vergl, pos, 1)) + Asc(Mid(Wort, n, 1)) - 129, 1)
Else
Verschlüsseln = Verschlüsseln & " "
End If
Next n
End Function

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Vigenère Veschlüsselung per VBA
27.03.2005 21:19:40
Ramses
Hallo
das leerzeichen ist in der normalen Zeichensatztabelle nicht an der Position an der du suchst (-129).
Option Explicit
Option Base 1

Function Verschlüsseln(ByVal Wort As String, ByVal Vergl As String) As String
'Text-Verschlüssung nach Vigenère
Dim n As Long, pos As Integer
Const abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ "
For n = 1 To Len(Wort)
'Leerzeichen suchen
If Mid((Wort), n, 1) = " " Then
pos = IIf(n Mod Len(Vergl) <> 0, n Mod Len(Vergl), Len(Vergl))
Verschlüsseln = Verschlüsseln & Mid(abc, Asc(Mid(Vergl, pos, 1)) + Asc(Mid(Wort, n, 1)), 1) & " "
Else
Verschlüsseln = Verschlüsseln & " "
End If
Vergl = UCase(Vergl)
Wort = UCase(Wort)
'Normale Buchstaben und Sonderzeichen
If Mid(UCase(Wort), n, 1) <> " " Then
pos = IIf(n Mod Len(Vergl) <> 0, n Mod Len(Vergl), Len(Vergl))
Verschlüsseln = Verschlüsseln & Mid(abc, Asc(Mid(Vergl, pos, 1)) + Asc(Mid(Wort, n, 1)) - 129, 1)
Else
Verschlüsseln = Verschlüsseln & " "
End If
Next n
End Function

Das verschlüsseln von Leerzeichen ist nicht vorgesehen.
Das grundsätzliche Problem bleibt danach der Ausbau und die Verwendung des Bereiches mit Sonderzeichen.
Damit ist das Prinzip der Vignere Verschluesselung aber dahin.
Gruss Rainer
Anzeige
AW: Vigenère Veschlüsselung per VBA
28.03.2005 00:31:46
chris
Hallo ihr beiden , bin gerade über euren Code gestolpert.
Würdet ihr mir das ganze kurz erklären ?
Also wie diese funktion verwendet und aufgerufen wird ?
Wäre super vielen Dnak grüße Christian
AW: Vigenère Veschlüsselung per VBA
28.03.2005 00:44:45
Frank
Hallo, Chris b!
Sinn und Zweck der Vigenère-Verschlüsselung ergibt sich aus meiner am heutigen Nachmittag gestellten Frage "INDEX und VERGLEICH? Vigenère-Chiffre."
Dort findest du sowohl Problemstellung als auch Lösung.
Ramses hat die Situation "nur" von der Formellösung auf VBA "umgestrickt."
(Vor solchen Leistungen ziehe ich als dämlicher Excel-Anfänger natürlich den Hut und versinke in ehrfürchtigem Staunen.)
Viele Grüße
Frank
Anzeige
AW: Vigenère Veschlüsselung per VBA
28.03.2005 00:50:39
Frank
Hallo, Christ b!
Beim Lesen fiel mir auf, dass Reinhard das "Umstricken" besorgte und Ramses korrigierend eingriff.
Selbstverständlich ziehe ich vor beiden den Hut!
Viele Grüße
Frank
AW: Vigenère Veschlüsselung per VBA
28.03.2005 01:09:21
Sigi
Hallo ihr Verschlüssler,
ich hätte da auch noch eine VBA-Funktion ...

Function VigenereHin(Text As String, CodeWort As String) As String
Dim ABC As Variant
Dim Q(0 To 59, 0 To 59) As String
Dim Co() As String
Dim Zei As String
Dim CoZei As String
Dim Txt As String
Dim LnKe As Long
Dim LnTx As Long
Dim Gf As Boolean
Dim i As Long
Dim j As Long
Dim x As Long
Dim z As Long
Dim s As Long
ABC = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", _
"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", _
"U", "V", "W", "X", "Y", "Z", "Ä", "Ö", "Ü", "@", _
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", _
"k", "l", "m", "n", "o", "p", "q", "r", "s", "t", _
"u", "v", "w", "x", "y", "z", "ä", "ö", "ü", "ß")
For i = 0 To 59
For j = 0 To 59
x = (i + j) Mod 60
Q(i, j) = ABC(x)
Next j
Next i
LnKe = Len(CodeWort)
LnTx = Len(Text)
ReDim Co(LnTx)
For i = 1 To LnTx
x = (i - 1) Mod LnKe
x = x + 1
Co(i) = Mid(CodeWort, x, 1)
Next i
For i = 1 To LnTx
Gf = False
CoZei = Co(i)
For z = 0 To 59
If Q(z, 0) = CoZei Then
Exit For
End If
Next z
For s = 0 To 59
If Q(0, s) = Mid(Text, i, 1) Then
Gf = True
Exit For
End If
Next s
If Gf Then
Zei = Q(z, s)
Txt = Txt & Zei
Else
Txt = Txt & Mid(Text, i, 1)
End If
Next i
VigenereHin = Txt
End Function

Gruß
Sigi
Anzeige
AW: Vigenère Entschlüsselung per VBA
28.03.2005 11:05:48
Sigi
Hallo,
und so wird wieder entschlüsselt ...

Function VigenereHer(Text As String, CodeWort As String) As String
Dim ABC As Variant
Dim Q(0 To 59, 0 To 59) As String
Dim Co() As String
Dim Zei As String
Dim CoZei As String
Dim Txt As String
Dim LnKe As Long
Dim LnTx As Long
Dim Gf As Boolean
Dim i As Long
Dim j As Long
Dim x As Long
Dim z As Long
Dim s As Long
ABC = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", _
"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", _
"U", "V", "W", "X", "Y", "Z", "Ä", "Ö", "Ü", "@", _
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", _
"k", "l", "m", "n", "o", "p", "q", "r", "s", "t", _
"u", "v", "w", "x", "y", "z", "ä", "ö", "ü", "ß")
For i = 0 To 59
For j = 0 To 59
x = (i + j) Mod 60
Q(i, j) = ABC(x)
Next j
Next i
LnKe = Len(CodeWort)
LnTx = Len(Text)
ReDim Co(LnTx)
For i = 1 To LnTx
x = (i - 1) Mod LnKe
x = x + 1
Co(i) = Mid(CodeWort, x, 1)
Next i
For i = 1 To LnTx
Gf = False
CoZei = Co(i)
For z = 0 To 59
If Q(z, 0) = CoZei Then
Exit For
End If
Next z
For s = 0 To 59
If Q(z, s) = Mid(Text, i, 1) Then
Gf = True
Exit For
End If
Next s
If Gf Then
Zei = Q(0, s)
Txt = Txt & Zei
Else
Txt = Txt & Mid(Text, i, 1)
End If
Next i
VigenereHer = Txt
End Function

Gruß
Sigi
Anzeige
Danke Rainer, auch an Sigi o.w.T
28.03.2005 16:44:16
Reinhard

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige