Verschlüsselungsprogramm

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
nfehren
User
Beiträge: 98
Registriert: Donnerstag 31. Oktober 2013, 15:11

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.
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Kommt darauf an wie du dein Verfahren gestalten willst.
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)
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
nfehren
User
Beiträge: 98
Registriert: Donnerstag 31. Oktober 2013, 15:11

Wäre nett wenn du deinen Code auch ein wenig erklären könntest :)
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

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.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
nfehren
User
Beiträge: 98
Registriert: Donnerstag 31. Oktober 2013, 15:11

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.
Ok vielen dank! :)
nfehren
User
Beiträge: 98
Registriert: Donnerstag 31. Oktober 2013, 15:11

Ich will jetzt eine andere Methode probieren. Ich habe erstmals ein dictionary erstellt:

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" : "^"}
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
Leonidas
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
Benutzeravatar
Balmung
User
Beiträge: 44
Registriert: Sonntag 17. März 2013, 18:36

Was Leonidas meint ist wahrscheinlich:

Code: Alles auswählen

encoded_string = ''.join(Zuweisungen[char] for char in dein_string)
Das andere gibt etwas anderes aus:

Code: Alles auswählen

>>> str(char for char in 'hallo welt')
'<generator object <genexpr> at 0x7f7874630730>'
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

>>> 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«
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ups, ja, Tatsache :oops:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
nfehren
User
Beiträge: 98
Registriert: Donnerstag 31. Oktober 2013, 15:11

Habe jetzt:

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" : "“", " " = "»",}
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?
nfehren
User
Beiträge: 98
Registriert: Donnerstag 31. Oktober 2013, 15:11

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 :oops: habe "=" anstatt von ":" geschrieben
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Nur sicherheitshalber: Dir ist schon klar, dass man diese "Verschlüsselung" mit einer statistischen Häufigkeitsanalyse in kürzester Zeit brechen kann?
nfehren
User
Beiträge: 98
Registriert: Donnerstag 31. Oktober 2013, 15:11

/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?
Natürlich ist mir das klar das jeder Vollidiot das knacken kann will damit ja auch eine wichtigen Daten abspeichern :lol:
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)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Man muss halt das dict umdrehen:

Code: Alles auswählen

dict((value, key) for key, value in dic.iteritems())
Achja, ``dic`` ist überhaupt ein ganz schön schlechter Name für dieses Teil. Der sagt nichts aus.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
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 :roll:
nfehren
User
Beiträge: 98
Registriert: Donnerstag 31. Oktober 2013, 15:11

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 !
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Wenn du Hinweise als "dumm darstellen lassen" ansiehst, dann ist das bedauerlich aber Gehende soll man nicht aufhalten. Mach's gut.
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Sehr nett, da opfert man seine Zeit, unentgeltlich und bekommt dafür Verwürfe.
Ein Forum gibt Hilfe zur Selbsthilfe, mehr nicht.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Benutzeravatar
A1245x
User
Beiträge: 28
Registriert: Donnerstag 10. April 2014, 13:02

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 :)
Bin noch Anfänger. Also bitte nicht so kompliziert erklären.
Benutzeravatar
Balmung
User
Beiträge: 44
Registriert: Sonntag 17. März 2013, 18:36

A1245x hat geschrieben:1. Ich habe hier ein "programm" geschrieben. Ist das denn sicher?
Nein
A1245x hat geschrieben:2. Könnt ihr noch tipps geben, wie ich das Verbessern kann?
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.
»Honk Honk«
Antworten