Guten morgen,
Steh grade vor meinem nächsten kleinen Projekt: Ein Programm zum ver- und entschlüsseln eines Strings.
Nun habe ich zwar Ideen nach welchem Algorithmus man vorgehen könnte aber wie das in Python 3 umusetzen ist weiß ich noch nicht ganz. Hab schon ein paar Foren durchsucht aber nichts einfaches, brauchbares gefunden.
Man könnte zum Beispiel jedem Buchstaben ein Zeichen zuordnen. In einem dictionary vielleicht? Bin dankbar über jede Hilfe.
Verschlüsselungsprogramm
Kommt darauf an wie du dein Verfahren gestalten willst.
Mal ein kleiner Denkanstoß wie Caesar aussehen könnte:
Mal ein kleiner Denkanstoß wie Caesar aussehen könnte:
Code: Alles auswählen
def caesar(string, shift):
return "".join(chr(ord(char) + shift) for char in string)
print caesar("hallo", 3)
Ok vielen dank!darktrym hat geschrieben:Versetze jedes Zeichen in der Zeichenkette um shift Positionen.
Wie du siehst wird dabei eine Liste aufgebaut die anschließend wieder zur Zeichenkette umgewandelt werden muss.
Ich will jetzt eine andere Methode probieren. Ich habe erstmals ein dictionary erstellt:
Ich möchte jetzt einen String einholen (zunächst nur Buchstaben) und dann jeden Buchstaben, mit dem dementsprechenden Zeichen aus dem dictionary, wechseln und als neue variable speichern.
Wie kann ich das nun verwirklichen?
mfg nfehren
Code: Alles auswählen
Zuweisungen = {"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" : "^"}
Wie kann ich das nun verwirklichen?
mfg nfehren
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Code: Alles auswählen
str(Zuweisungen[char] for char in dein_string)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Was Leonidas meint ist wahrscheinlich:
Das andere gibt etwas anderes aus:
Tipp:
Das Modul string hat mit string.printable, eine „Liste“ sämtlicher druchbaren ASCII Zeichen, falls du eine Referenz brauchst, für deine Zuweisungen.
Code: Alles auswählen
encoded_string = ''.join(Zuweisungen[char] for char in dein_string)
Code: Alles auswählen
>>> str(char for char in 'hallo welt')
'<generator object <genexpr> at 0x7f7874630730>'
Das Modul string hat mit string.printable, eine „Liste“ sämtlicher druchbaren ASCII Zeichen, falls du eine Referenz brauchst, für deine Zuweisungen.
Code: Alles auswählen
>>> import string
>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
Zuletzt geändert von Balmung am Dienstag 1. April 2014, 13:23, insgesamt 4-mal geändert.
»Honk Honk«
Habe jetzt:
Aber beim Whitespace macht er probleme wenn ich den drin habe geht gar nichts mehr. Kann man einem Whitespace einfach nichts zuordnen oder sind die syntax falsch?
Code: Alles auswählen
dic = {"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" : "æ", "0" : "¢", "1" : "˝", "2" : "¨", "3" : "→",
"4" : "ĸ", "5" : "ø", "6" : "þ", "7" : "ſ", "8" : "ŋ", "9" : "“", " " = "»",}
Code: Alles auswählen
dic = {"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" : "æ", "0" : "¢", "1" : "˝", "2" : "¨", "3" : "→",
"4" : "ĸ", "5" : "ø", "6" : "þ", "7" : "ſ", "8" : "ŋ", "9" : "“", " " = "»",}
Habe den Fehler gefunden war unkonzentriert habe "=" anstatt von ":" geschrieben
Natürlich ist mir das klar das jeder Vollidiot das knacken kann will damit ja auch eine wichtigen Daten abspeichern/me hat geschrieben:Nur sicherheitshalber: Dir ist schon klar, dass man diese "Verschlüsselung" mit einer statistischen Häufigkeitsanalyse in kürzester Zeit brechen kann?
sollte nur zur Übung dienen, mal eine Verschlüsselung verstanden zu haben.
Wenn man den Text wieder entschlüsseln will müsste man ja nur alles umgekehrt machen oder?
sprich hier etwas verändern:
Code: Alles auswählen
safetext = ''.join(dic[char] for char in unsafetext)
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Man muss halt das dict umdrehen:
Achja, ``dic`` ist überhaupt ein ganz schön schlechter Name für dieses Teil. Der sagt nichts aus.
Code: Alles auswählen
dict((value, key) for key, value in dic.iteritems())
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
@nfehren: Damit hast du keine Verschluesselung sondern hoechstens Dictionaries und Stringmanipulation verstanden.
Der andere Weg, das Chiffrat mittels statistischer Analyse zu entschluesseln, ist da weit interessanter.
Wenn es dir wirklich um Verschluesselung geht, solltest du zb RSA / AES aus Krypto-Primitiven entwickeln. Oh .. und sie nie in Produktionscode verwenden.
@/me: Aber dazu muss die Analyse schon mehr als ASCII beherrschen
Der andere Weg, das Chiffrat mittels statistischer Analyse zu entschluesseln, ist da weit interessanter.
Wenn es dir wirklich um Verschluesselung geht, solltest du zb RSA / AES aus Krypto-Primitiven entwickeln. Oh .. und sie nie in Produktionscode verwenden.
@/me: Aber dazu muss die Analyse schon mehr als ASCII beherrschen
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Also ich glaube ich werd mich von diesem Forum abmelden mir wird zwar immer geholfen aber ich will mich auch nicht dumm darstellen lassen. Meiner Meinung nach ist ein Forum da um Neulingen zu helfen aber anscheinend täusch ich mich da. Adios !
Wenn du Hinweise als "dumm darstellen lassen" ansiehst, dann ist das bedauerlich aber Gehende soll man nicht aufhalten. Mach's gut.nfehren hat geschrieben:Also ich glaube ich werd mich von diesem Forum abmelden mir wird zwar immer geholfen aber ich will mich auch nicht dumm darstellen lassen.
1. Ich habe hier ein "programm" geschrieben. Ist das denn sicher?
Ausschnitt aus dem Programm:
AAA = "A"
AA = ord(AAA)*356219874
A = hex(AA)
2. Könnt ihr noch tipps geben, wie ich das Verbessern kann?
Danke
Ausschnitt aus dem Programm:
AAA = "A"
AA = ord(AAA)*356219874
A = hex(AA)
2. Könnt ihr noch tipps geben, wie ich das Verbessern kann?
Danke
Bin noch Anfänger. Also bitte nicht so kompliziert erklären.
NeinA1245x hat geschrieben:1. Ich habe hier ein "programm" geschrieben. Ist das denn sicher?
Der beste Tipp den du wahrscheinlich bekommen kannst, ist die Empfehlung nicht zu versuchen selbst eine "Verschlüsselung" zu implementieren, sondern auf bereits existierende zurückzugreifen.A1245x hat geschrieben:2. Könnt ihr noch tipps geben, wie ich das Verbessern kann?
»Honk Honk«