Hallo liebe community !
Und zwar suche ich ein Programm mit dem ich die sogenannte "Gartenzaunverschlüsselung" realisieren kann... leider bin ich total neu in diesem Gebiet und Bitte daher um eure Mithilfe... Leider bräuchte ich diese Programm bis heute abend.....
MfG WrrR91
[/code]
Verschlüsselung durch "Gartenzaunverschlüsselung"
- Damaskus
- Administrator
- Beiträge: 995
- Registriert: Sonntag 6. März 2005, 20:08
- Wohnort: Schwabenländle
Hallo und Willkommen im Forum.
Ich würd hier http://www.python-forum.de/topic-1689.html mal reinschauen.
Gruß
Damaskus
Ich würd hier http://www.python-forum.de/topic-1689.html mal reinschauen.
Gruß
Damaskus
Hier mal ein kleiner Ansatz zum Verschlüsseln, entschlüsseln müsstest damit selber hinbekommen.
Code: Alles auswählen
#!/usr/bin/env python
def crypt(message):
lines = 2
words = []
for i in range(lines):
s = ""
words.append(s)
current_line = 0
for char in message:
words[current_line] += char
current_line += 1
if current_line >= lines:
current_line = 0
return words
if __name__ == "__main__":
print crypt("Das ist ein langer String.")
Da kann sich der OP echt bedanken, dass sieht nämlich so gruselig umständlich und unpythonisch aus, dass der Lehrer wahrscheinlich glaubt, dass es vom OP ist. Dann noch die falschen Funktionsnamen…
ice2k3 hat geschrieben:Mir war langweilig^^
http://paste.pocoo.org/show/107639/
Jetzt will ich aber ein Dankeschön hören
DANKE DANKE DANKE DANKE DANKE DANKE =)=)=)=)=)=)=)=)=) <3 <3
ich danke dir viiieeelllmmmaaalllls :D
aber wie funktioniert das? ^^ice2k3 hat geschrieben:Mir war langweilig^^
http://paste.pocoo.org/show/107639/
Jetzt will ich aber ein Dankeschön hören
edit: bei mersten evrstehe ich wie es geht aber wie gehts das2. wie kann ich es entschlüsseln lassen?
@ice2k3: Warum das so aussieht? Na weil Du's so geschrieben hast.
Du verwendest ``for``-Schleifen über `range()` um Indexe zu generieren, Zähler die "manuell" hochgezählt werden, umständliches ``if``\s statt Modulo-Arithmetik, und geschachteltes Indexing auf `words`.
Der Name `encrypt` ist genau falsch, die Funktion müsste `decrypt` heissen. Das die einfach nur die Nachricht, und keinen Schlüssel als Argument benötigt, macht das Ganze komplett sinnlos. Wenn man eine verschlüsselte Nachricht, völlig ohne "geheimes" Wissen entschlüsseln kann, braucht man ja gar nicht erst verschlüsseln.
Mein Versuch:
Du verwendest ``for``-Schleifen über `range()` um Indexe zu generieren, Zähler die "manuell" hochgezählt werden, umständliches ``if``\s statt Modulo-Arithmetik, und geschachteltes Indexing auf `words`.
Der Name `encrypt` ist genau falsch, die Funktion müsste `decrypt` heissen. Das die einfach nur die Nachricht, und keinen Schlüssel als Argument benötigt, macht das Ganze komplett sinnlos. Wenn man eine verschlüsselte Nachricht, völlig ohne "geheimes" Wissen entschlüsseln kann, braucht man ja gar nicht erst verschlüsseln.
Mein Versuch:
Code: Alles auswählen
from functools import partial
def crypt(message, key, encrypt=True):
if key < 2:
raise ValueError('key must be >= 2')
message += ' ' * (-len(message) % key)
step = key if encrypt else len(message) // key
return ''.join(message[i::step] for i in xrange(step)).rstrip()
encrypt = crypt
decrypt = partial(crypt, encrypt=False)
def main():
message = 'Das ist eine lange Zeichenkette.'
for i in xrange(2, 10):
crypted = encrypt(message, i)
print '%d) %-38r %-38r' % (i, crypted, decrypt(crypted, i))
Und welche der beiden Lösung ist jetzt wohl besser um einen Algorithmus aufzuzeigen. Und genau darum geht es ja wohl hier...
Und nach dem Verschlüsseln müssen die einzelnen Zeilen getrennt vorliegen, ist bei dir auch nicht der Fall!
Hab außerdem noch Fehler im Algorithmus, die müssten bei dir auch mit drin sein.
Und nach dem Verschlüsseln müssen die einzelnen Zeilen getrennt vorliegen, ist bei dir auch nicht der Fall!
Hab außerdem noch Fehler im Algorithmus, die müssten bei dir auch mit drin sein.
Ganz ehrlich? BlackJacks. Der Algorithmus hat sich ja nicht geändert, aber BlackJack hat in auf eine Art und Weise implementiert, die den Möglichkeiten der Sprache und der Mathematik gerecht wird. Dein Algorithmus verwendet ja noch nicht mal so grundlegende Dinge wie modulare Arithmetik (aka Restwertdivision).ice2k3 hat geschrieben:Und welche der beiden Lösung ist jetzt wohl besser um einen Algorithmus aufzuzeigen.
Hier noch eine viel "grausamere", aber funktionierende Variante.
Das ist echt hässlich, aber diesmal ist es der richtige Algorithmus.
(Wenn es z.B. 3 Zeilen gibt, muss zuerst in die 1. Zeile, dann 2. dann 3. dann 2. dann 1. dann 2., ... Zeile geschrieben werden)
Bin mal gespannt, wie und ob du das in richtigem Python löst^^
http://paste.pocoo.org/show/107678/
Das ist echt hässlich, aber diesmal ist es der richtige Algorithmus.
(Wenn es z.B. 3 Zeilen gibt, muss zuerst in die 1. Zeile, dann 2. dann 3. dann 2. dann 1. dann 2., ... Zeile geschrieben werden)
Bin mal gespannt, wie und ob du das in richtigem Python löst^^
http://paste.pocoo.org/show/107678/
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Kannst Du uns dazu mal eine Quelle geben bitte? (Zumal ich noch nicht erkennen kann, inwiefern es einen sicherheitsrelevanten Unterschied macht, ob ich von "unten" wieder nach oben gehe oder wieder von der ersten zur letzten Zeile! Im Zweifel ist das exakt ein Versuch mehr beim Entschlüsslen Oder habe ich da was übersehen?)ice2k3 hat geschrieben: Das ist echt hässlich, aber diesmal ist es der richtige Algorithmus.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Das ist ja wohl nicht Dein Ernst?!? google benutzen kann ich schon - ich merke aber an Deinem Kommentar, dass Du Dir gar keine Mühe gemacht hast, eine seriöse Quelle zu suchen!ice2k3 hat geschrieben:Google: "Gartenzaunverschlüsselung"
Erster Treffer.
Kann ja nicht so schwer sein...
Meine Frage bezog sich auf eine wissenschaftliche Beschreibung dieser Methode - du lieferst mir einen Aufgabenzettel (Und das noch als ersten Treffer bei google)!
Doch wird es! Die meisten Treffer arbeiten nur mit zwei Zeilen klären die Frage also nicht, und bei mehr Zeilen gibt's sowohl das "Sägezahnmuster", als auch das "Dreiecksmuster". Solange also keine bessere Quelle genannt wird, gehe ich mal davon aus, dass Gartenzaunverschlüsselung mit mehr als zwei Zeilen nicht eindeutig beschreibt wie die Buchstaben auf die Zeilen verteilt werden sollen.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich bevorzuge ja diese Variante.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Also "Dreiecksmuster".
@ice2k3: Wobei auch die Webseite die Leonidas verlinkt hat, wie auch alle anderen die ich gefunden habe, davon ausgeht, das der verschlüsselte Text aus *einer* *zusammenhängenden* Zeichenkette besteht, und nicht aus den einzelnen "Zeilen" getrennt. Du machst es Dir mit dem Entschlüsseln also eindeutig zu einfach, weil Du mehr Informationen verwendest, als Du an dem Punkt eigentlich haben dürftest.
@ice2k3: Wobei auch die Webseite die Leonidas verlinkt hat, wie auch alle anderen die ich gefunden habe, davon ausgeht, das der verschlüsselte Text aus *einer* *zusammenhängenden* Zeichenkette besteht, und nicht aus den einzelnen "Zeilen" getrennt. Du machst es Dir mit dem Entschlüsseln also eindeutig zu einfach, weil Du mehr Informationen verwendest, als Du an dem Punkt eigentlich haben dürftest.
Code: Alles auswählen
def encrypt(m):
m = m.upper().replace(" ", "")
return m[::2] + " " + m[1::2]
print encrypt("Hallo Welt")