Guten Morgen,
ich möchte ein Programm schreiben, welches Texte über die Eingabe einließt und dann in einer "verschlüsselten Form" wieder ausgibt. Idealerweise als pdf.
Ziel ist es, dass meine Kids den verschlüsselten Text mit dem passenden Schlüssel wieder "von Hand" entschlüsseln.
Grundlage der Verschlüsselung soll einfach ein "alternatives, fiktives" Alphabet sein, welches möglichst im Programmcode verändert werden kann.
Es hat keinen sicherheitsrelevanten Hintergrund. Im Grunde ist es nur ein "Symbolaustauschscript"
Ein Beispiel:
Klartext: "Lieber Timmy, ..... " wird in das Progamm als Eingabe gegeben
Schlüssel im Programmcode "L = % , i = §, e = ! ... "
Ausgabe des Programms: " %§! ... " idealerweise als pdf, damit ich es gleich ausdrucken kann.
Kann mir jemand einen Hinweis geben, wie ich damit anfange?
Ich bin Anfänger aber mit den Grundlagen von Python durch codecademy und Bücher vertraut.
Wenn ich mich recht erinnere gibt es doch Funktionen, die Symbole austauschen. Z.B. alle Kleinbuchstaben in Großbuchstaben verwandeln.
So ähnlich müsste doch auch mein Programmfunktionieren. Oder?
Viele Grüße und Dank für eure Beiträge
Roland
Textverschlüsselung mit fiktivem Alphabet
Erster Anlaufpunkt, wenn man etwas so triviales sucht, sollte die Dokumentation sein. Du willst etwas mit Zeichenketten (Strings) tun, also würde ich dort mal - und bei den - Funktionen für Zeichenkette schauen, ob es das gibt, was du brauchst.
Zumindest für den ersten Schritt.
Und wenn das klappt, würde ich mir Gedanken um die Ausgabe machen.
Zumindest für den ersten Schritt.
Und wenn das klappt, würde ich mir Gedanken um die Ausgabe machen.
Ich wuerde mit einem expliziten Mapping in Form eines Woerterbuchs arbeiten. Denn damit ermoeglichst du auch spassigere Alphabete, wie zB Emoji.
Und dann einfach string.replace fuer alle Eintraege anwenden.
Die wichtigere Frage ist die nach dem PDF. Mir ist da nur reportlab bekannt, das wuerde ich mir an deiner Stelle mal anschauen. Ein Artikel dazu ist zB hier zu finden: https://kaviraj.me/generating-pdf-conta ... ji-python/
Code: Alles auswählen
alphabet = {
"a": "🐜",
"b": "🐝",
"c": "🦗",
}
Die wichtigere Frage ist die nach dem PDF. Mir ist da nur reportlab bekannt, das wuerde ich mir an deiner Stelle mal anschauen. Ein Artikel dazu ist zB hier zu finden: https://kaviraj.me/generating-pdf-conta ... ji-python/
Also ich würde sowas mit maketrans und translate machen, hier mal Beispielcode.
Die erste Stelle im String VON wird zu der ersten Stelle des Strings ZU, also a -> z, b -> y
Die erste Stelle im String VON wird zu der ersten Stelle des Strings ZU, also a -> z, b -> y
Code: Alles auswählen
import string
VON = "abcdefghijklmnopqrstuvwxyz"
ZU = "zyxwvutsrqponmlkjihgfedcba"
def verschluesseln(text):
trans = str.maketrans(ZU ,VON)
return text.lower().translate(trans)
def main():
text = input("Was soll uebersetzt werden?: ")
print(verschluesseln(text))
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Ich würde mir da für das `maketrans()` noch eine Hilfsfunktion schreiben die ein bisschen prüft. Beispielsweise dass das Ziel kein Zeichen mehrfach enthält. Zudem ist die Angabe von zwei getrennten ”parallelen” Werten fehleranfällig bei Veränderungen. Ein Wörterbuch wie von __deets__ vorgeschlagen kann man `maketrans()` auch übergeben (und auch `translate()`!) und da sieht man einfacher die Zuordung.
Falls einem das schreiben eines literalen Wörterbuchs zu viel Syntax zu tippen ist, kann man das auch als Zeichenkette, beispielsweise "a=
b=
c=
" schreiben und ein bisschen Code der daraus dann ein Wörterbuch erstellt.
Falls einem das schreiben eines literalen Wörterbuchs zu viel Syntax zu tippen ist, kann man das auch als Zeichenkette, beispielsweise "a=
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Cricket. War etwas durch die Brust

Ich dachte immer, translate geht nur Byte-Weise, und ist darum eben genau nicht unicode geeignet. Das mag sich aber mit Py3 geaendert haben, ich hab's nur mal bei Python 2 angeschaut, und auch das vor ewigen Zeiten.
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@__deets__: In Python 2 operiert `str.translate()` auf Bytes, aber `unicode.translate()` doch nicht. Was da ein bisschen unschön war ist das die Schlüssel der Abbildung Codepoints sein mussten. Das hätte man also beispielsweise so schreiben müssen:
Test in Python 2.7:
Code: Alles auswählen
alphabet = {
ord(u"a"): u"🐜",
ord(u"b"): u"🐝",
ord(u"c"): u"🦗",
}
Code: Alles auswählen
>>> alphabet = {
... ord(u"a"): u"🐜",
... ord(u"b"): u"🐝",
... ord(u"c"): u"🦗",
... }
>>> u"abc".translate(alphabet)
u'\U0001f41c\U0001f41d\U0001f997'
>>> print u"abc".translate(alphabet)
🐜🐝🦗
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Das Erzeugen von PDFs mit Python ist eine zweite, für sich stehende Frage, die von der Verschlüsselung unabhängig ist. Persönlich würde ich das in der Regel mit LaTeX machen. Also ein einfaches Template anlegen, dieses mit Python befüllen und dann mit pdflatex ein PDF daraus erzeugen. Es gibt aber wohl auch Python-Module zur PDF-Erzeugung (die den Vorteil haben, dass man keine LaTeX-Umgebung benötigt) wie pyPDF oder Reportlab. Mit diesen kenne ich mich aber nicht aus. Und wenn du nur zwei, drei Texte verschlüsseln möchtest, geht es per Copy & Paste in eine Textverarbeitung sicher schneller.Roland0815 hat geschrieben: ↑Montag 4. November 2019, 10:39 ich möchte ein Programm schreiben, welches Texte über die Eingabe einließt und dann in einer "verschlüsselten Form" wieder ausgibt. Idealerweise als pdf.