0 Daumen
332 Aufrufe

Aufgabe:Ich habe mir verschiedene Implementationen von Cäsar- bzw. Vigenère-Algorithmen angesehen, überall wird mal modulo 26 gerechnet (auch bei wikipedia). Warum? Es gibt doch nicht nur 26 Buchstaben.



Problem/Ansatz:

Avatar von

Es werden aber nur 26 Buchstaben verwendet.

Ich habe den String

s = 'alle meine 1,2,3 Entchen schwimmen auf dem See.{[ä]}²'

ver- und entschlüsselt, das sind mehr als 26 Zeichen.

Ich habe chatGPT beauftragt, ein python-Programm zu schreiben, Egebnis:

def caesar_cipher(text, shift):
  result = ""

  for char in text:
      if char.isalpha():
          shift_amount = shift % 26
          if char.islower():
              shifted_char = chr(((ord(char) - ord('a') + shift_amount)) + ord('a') % 26)
          else:
              shifted_char = chr(((ord(char) - ord('A') + shift_amount)) + ord('A') % 26)
          result += shifted_char
      else:
          result += char
  return result

text = "Hello, World!"
shift = 3
encrypted_text = caesar_cipher(text, shift)
print("Original Text:", text)
print("Encrypted Text:", encrypted_text)

Hier werden sogar Großbuchstaben durch solche codiert. Das ist überflüssig.

Dem Computer ist es egal, ob ein Zeichen ein Buchstabe ist oder nicht. Man kann auch s = 'alle meine Entchen'+chr(13)+chr(10)+' schwimmen auf dem See.'
ver- und entschlüsseln.

Was für die berühmte Enigma zugetroffen hat gilt auch für deine Krypto:

Wiki==>

>Da die Enigma nur Großbuchstaben und keine Ziffern oder Satzzeichen verschlüsseln kann und auch kein Leerzeichen kennt, muss der oben dargestellte Klartext vor der Verschlüsselung zunächst entsprechend aufbereitet werden. Dabei werden Satzzeichen durch „X“ ersetzt, Eigennamen verdoppelt und in „X“ eingeschlossen und Zahlen ziffernweise ausgeschrieben. Ferner war es außer bei Eigennamen üblich, das „ch“ und das „ck“ durch „Q“ zu ersetzen und den Text anschließend in Fünfergruppen zu gliedern<

Na ja, vor 2000 bzw. 400 Jahren hat man Stäbe mit den Buchstaben verwendet, die gegeneinander verschoben wurden. Aber heute sind wir doch ein wenig weiter als zu Enigma-Zeiten.

Fernschreiber haben Buchstaben (ohne Unterscheidung groß/klein) und Zahlen mit jeweils 5 Löchern auf dem Lochstreifen, sprich 25 = 32 möglichen Zeichen übermittelt. Es gab zwei Ebenen und zwei Umschalttasten BUCHSTABEN und ZIFFERN. Beispielsweise stehen die Löcher ganz links im Bild für B auf der Buchstaben-Ebene und für das Fragezeichen auf der Ziffern/Satzzeichen-Ebene.

blob.png

Die kleinen Löcher sind zum Transport des Streifens.

Cäsar- bzw. Vigenère-Algorithmen sind sehr alte Verfahren. Aus diesem Grund verwenden wir auch die Tatsachen aus Enigma-Zeiten

Ich habe mal probeweise die 26 durch 10 ersetzt, da bleiben einige Buchstaben unverschlüsselt; das "Verkürzen" mod 26 ist also eher schädlich. Man kann das ohne weiteres weglassen, es sind neben den Buchstaben noch genügend Zeichen vorhanden.

Es ist nicht schädlich. Du verstehst nur einfach den Sinn nicht. Siehe Kommentar unten. Sowas einfach wegzulassen ist jedenfalls ein sehr schlechter Programmierstil.

Wo ist denn hier ein schlechter Programmierstil?

def ver(klartext, key):
  ausgabe = ''
  for i in range(len(klartext)):
      ausgabe += chr(ord(klartext[i]) + ord(key[i % len(key)]))
  return ausgabe

def ent(geheimtext, key):
  ausgabe = ''
  for i in range(len(geheimtext)):
      ausgabe += chr(ord(geheimtext[i]) - ord(key[i % len(key)]))
  return ausgabe

Und wo sollte hier mit "mod 26", (also %26) nachgebessert werden?

1 Antwort

+1 Daumen

Das Alphabet hat 26 Buchstaben, wenn du verschiebst bei Cäsar musst du nach Z auf A kommen. Dafür benötigst du die Restbetrachtung.

Avatar von

Siehe oben (alle meine Entchen). Welche Rolle spielt da die 26?

Die Implentierungen sind nicht so alt. Ist den das Rechnen mod 26 nötig oder kann man das einfach weglassen?

Beim Vigenère-Veerfahren hat man einen key, man verschiebt man das i-te Zeichen um ord(k[i]) vorwärts (bei der Dekodierung rückwärts). Welche Rolle hat da die 26?

Du verschiebst ja jeden einzelnen Buchstaben eines Wortes

verschieben heißt ein offset, in deinen worten plus ord(k[i]), mod 26 sorgt dafür, das das was über den zeichenvorrat 0....25 hinaus verschoben wird von vorne wieder reingeschoben wird....

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community