Szyfr Cezara

Szyfr Cezara

Program: szyfrujący wprowadzony tekst przez użytkownika szyfrem Cezara, o podanym również przez użytkownika przesunięciu.

Program następnie wykonuje zliczenie znaków, gdzie przyjmuje trzy najczęściej występowane znaki za literę „A”, po czym następuje trzykrotne odszyfrowanie według ilości wcześniej znalezionych znaków.
Podawane są również adekwatne klucze do przesunięć.

Kompilator: Microsoft Excel

Galeria:

Program w akcji.

Film:

Kod programu:

Public tablica(1 To 26) As Integer

Sub Szyfruj()
    
    Cells(13, 11) = ""
    Cells(14, 11) = ""
    Cells(15, 11) = ""
    Cells(9, 10) = ""
    Cells(10, 10) = ""
    Cells(11, 10) = ""
    Cells(6, 10) = ""
    For i = 10 To 35
            Cells(18, i) = 0
            Cells(19, i) = ""
            Cells(20, i) = ""
            Cells(21, i) = ""
    Next i
    tekst = Cells(4, 5)
    Cells(4, 10) = Cells(4, 5)
    tekst = LCase(tekst)
    długość = Len(tekst)
    
    n = InputBox("Podaj o ile zaszyfrować tekst:")
    For i = 1 To długość
        znak = Mid(tekst, i, 1)
        liczba_znaku = Asc(znak)
        If liczba_znaku >= 97 And liczba_znaku <= 122 Then
            liczba_znaku = 97 + (liczba_znaku + n - 97) Mod 26
            znak = Chr(liczba_znaku)
            Cells(6, 10) = Cells(6, 10) + znak
        End If
    Next i
    
End Sub

Sub Zlicz_znaki()
    
    tekst = Cells(6, 10)
    długość = Len(tekst)
    
    For i = 1 To 26
            tablica(i) = 0
    Next i
    
    For i = 1 To długość
        znak = Mid(tekst, i, 1)
        liczba_znaku = Asc(znak)
        liczba_znaku = liczba_znaku - 96
        tablica(liczba_znaku) = tablica(liczba_znaku) + 1
    Next i
    
    For i = 10 To 35
        Cells(17, i) = Chr(96 + i - 9)
        Cells(18, i) = tablica(i - 9)
    Next i

End Sub

Sub Atakuj()
    
    Cells(13, 11) = ""
    Cells(14, 11) = ""
    Cells(15, 11) = ""
    przesuniecie1 = 0
    przesuniecie2 = 0
    przesuniecie3 = 0
    znak_maks1 = "a"
    znak_maks2 = "a"
    znak_maks3 = "a"
    maks1 = 0
    maks2 = 0
    maks3 = 0
    For i = 1 To 26
        If tablica(i) > maks3 And tablica(i) > maks2 And tablica(i) > maks1 Then
            znak_maks1 = Cells(17, i + 9)
            maks1 = tablica(i)
        Else
            If tablica(i) > maks3 And tablica(i) > maks2 Then
                znak_maks2 = Cells(17, i + 9)
                maks2 = tablica(i)
            Else
                If tablica(i) > maks3 Then
                    znak_maks3 = Cells(17, i + 9)
                    maks3 = tablica(i)
                End If
            End If
        End If
    Next i
    
    przesuniecie1 = Asc(znak_maks1) - 97
    przesuniecie2 = Asc(znak_maks2) - 97
    przesuniecie3 = Asc(znak_maks3) - 97
    Cells(9, 10) = przesuniecie1
    Cells(10, 10) = przesuniecie2
    Cells(11, 10) = przesuniecie3
    tekst = Cells(6, 10)
    długość = Len(tekst)
    
    For i = 1 To długość
        znak = Mid(tekst, i, 1)
        liczba_znaku = Asc(znak)
        liczba_znaku = 97 + (liczba_znaku + 33 - przesuniecie1) Mod 26
        znak = Chr(liczba_znaku)
        Cells(13, 11) = Cells(13, 11) + znak
    Next i
    
    If Cells(10, 10) = 0 Then
        Cells(14, 11) = "-"
        Cells(20, 22) = "-"
    Else
        For i = 1 To długość
            znak = Mid(tekst, i, 1)
            liczba_znaku = Asc(znak)
            liczba_znaku = 97 + (liczba_znaku + 33 - przesuniecie2) Mod 26
            znak = Chr(liczba_znaku)
            Cells(14, 11) = Cells(14, 11) + znak
        Next i
        For i = 10 To 35
            Cells(20, i) = Chr(97 + (i + 16 - przesuniecie2) Mod 26)
        Next i
    End If
    
    If Cells(11, 10) = 0 Then
        Cells(15, 11) = "-"
        Cells(21, 22) = "-"
    Else
        For i = 1 To długość
            znak = Mid(tekst, i, 1)
            liczba_znaku = Asc(znak)
            liczba_znaku = 97 + (liczba_znaku + 33 - przesuniecie3) Mod 26
            znak = Chr(liczba_znaku)
            Cells(15, 11) = Cells(15, 11) + znak
        Next i
        For i = 10 To 35
            Cells(21, i) = Chr(97 + (i + 16 - przesuniecie3) Mod 26)
        Next i
    End If
    
    For i = 10 To 35
        Cells(19, i) = Chr(97 + (i + 16 - przesuniecie1) Mod 26)
    Next i

End Sub

Sub Czyść()

    Cells(4, 5) = ""
    Cells(4, 10) = ""
    Cells(6, 10) = ""
    Cells(9, 10) = ""
    Cells(10, 10) = ""
    Cells(11, 10) = ""
    Cells(13, 11) = ""
    Cells(14, 11) = ""
    Cells(15, 11) = ""
    For i = 10 To 35
            Cells(18, i) = 0
            Cells(19, i) = ""
            Cells(20, i) = ""
            Cells(21, i) = ""
    Next i

End Sub

Słowniczek pojęć:

W kryptografii jedna z najprostszych technik szyfrowania. Jest to rodzaj szyfru podstawieniowego, w którym każda litera tekstu jawnego (niezaszyfrowanego) zastępowana jest oddaloną od niej o stałą liczbę pozycji w alfabecie inną literą (szyfr monoalfabetyczny), przy czym kierunek zamiany musi być zachowany.