Vigenère Veschlüsselung per VBA

Bild

Betrifft: Vigenère Veschlüsselung per VBA
von: Reinhard
Geschrieben am: 27.03.2005 20:37:06
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

Bild

Betrifft: AW: Vigenère Veschlüsselung per VBA
von: Ramses
Geschrieben am: 27.03.2005 21:19:40
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
Bild

Betrifft: AW: Vigenère Veschlüsselung per VBA
von: chris b
Geschrieben am: 28.03.2005 00:31:46
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
Bild

Betrifft: AW: Vigenère Veschlüsselung per VBA
von: Frank
Geschrieben am: 28.03.2005 00:44:45
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
Bild

Betrifft: AW: Vigenère Veschlüsselung per VBA
von: Frank
Geschrieben am: 28.03.2005 00:50:39
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
Bild

Betrifft: AW: Vigenère Veschlüsselung per VBA
von: Sigi
Geschrieben am: 28.03.2005 01:09:21
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
Bild

Betrifft: AW: Vigenère Entschlüsselung per VBA
von: Sigi
Geschrieben am: 28.03.2005 11:05:48
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
Bild

Betrifft: Danke Rainer, auch an Sigi o.w.T
von: Reinhard
Geschrieben am: 28.03.2005 16:44:16

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Makros automatisch starten"