VERSCHLÜSSELN !!! ENTSCHLÜSSELN bitte um hilfe

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.
Antworten
SebbyStankie
User
Beiträge: 8
Registriert: Dienstag 22. Juli 2008, 15:20

hallo erstmal, ich hab python erst seit kurzem für mich entdeckt und wollte gleich mal ein kleines verschlüsselungsprogramm schreiben.
also ich habe es schon hin bekommen das jeder buchstabe 16zeichen bekommt zb. a= IOXIOXOIXOIOIXOO. aber leider funktioniert es nicht aus 16zeichen ein "a" zu machen. und ich weiß nicht wo der fehler ist/aber sonst finde ich python sehr gut!!! hier mal meine codes:

verschlüsseln:

Code: Alles auswählen

# -*- coding: cp1252 -*-
#Autor: Sebby Stankie
#Datum: 19.07.2008
#Verschlüsselungsprogramm

klar = ("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","ß"," ")

geheim = ("XIIOXOXXIOXIXIOO",   "IXIIXIOXIOOIXXOO",
                "OOOXOIXIXXXOOIOO", "OOIIOXXOOIOIIIXX",
                "IXXXXXXXIIOIOIXI",     "IIIIIXOOIIIIXXXX",
                "OOXOOIOIOIIXIIOX",    "OIIXOIXIIOOXOOIX",
                "XXIOXIXIOXXIXXOO",   "IXOXXOXIOOOXIOOI",
                "XIOIXIOOOXIIOIIO",     "OXOIIXIOXIXOIXXI",
                "OIXXOOXIOXIXOOOX",  "OXOXXOOIOOXXXIXI",
                "IIXIXIIOXXOIXIOI",       "OIIXIXXIOOIOXIXX",
                "IOOOOXXIOXXXOOII",   "IOXXOIOIXXIIIOOO",
                "OIXOOOOIOXOIOIXO",   "IIXIIIIXXXXXIOOO",
                "OIIOIXXOOOOOXIXX",   "OIIXOIIXIOXOIXXO",
                "XIXIOOOXIOXOXIXI",    "IOOXOOOOOIIOOOXO",
                "OIIXIXIXIIOIIOXI",        "OOOIOIOXXIXIXOXO",
                "XXIIXXIXOOOXXIIO",     "OIOIOOOXIOXIXXXI")
cc = {}
for j in range(28):
    cc[klar[j]] = geheim[j]

vtext = raw_input("Zu codierender Text:")


geheimtext = ""
for b in vtext:
    if b in cc:
        neu = cc[b]
    else:
        neu = b
    geheimtext = geheimtext + neu


print geheimtext

raw_input()


entschlüsselung:

Code: Alles auswählen

# -*- coding: cp1252 -*-
#Autor: Sebby Stankie
#Datum: 19.07.2008
#Entschlüsselungsprogramm

geheim = ("XIIOXOXXIOXIXIOO", "IXIIXIOXIOOIXXOO",
          "OOOXOIXIXXXOOIOO", "OOIIOXXOOIOIIIXX",
          "IXXXXXXXIIOIOIXI", "IIIIIXOOIIIIXXXX",
          "OOXOOIOIOIIXIIOX", "OIIXOIXIIOOXOOIX",
          "XXIOXIXIOXXIXXOO", "IXOXXOXIOOOXIOOI",
          "XIOIXIOOOXIIOIIO", "OXOIIXIOXIXOIXXI",
          "OIXXOOXIOXIXOOOX", "OXOXXOOIOOXXXIXI",
          "IIXIXIIOXXOIXIOI", "OIIXIXXIOOIOXIXX",
          "IOOOOXXIOXXXOOII", "IOXXOIOIXXIIIOOO",
          "OIXOOOOIOXOIOIXO", "IIXIIIIXXXXXIOOO",
          "OIIOIXXOOOOOXIXX", "OIIXOIIXIOXOIXXO",
          "XIXIOOOXIOXOXIXI", "IOOXOOOOOIIOOOXO",
          "OIIXIXIXIIOIIOXI", "OOOIOIOXXIXIXOXO",
          "XXIIXXIXOOOXXIIO", "OIOIOOOXIOXIXXXI")


klar = ("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","ß"," ")

cc = {}

for j in range(28):
    cc[geheim[j]] = klar[j]

vtext = raw_input("Zu entschlüsselnder Text:")


geheimtext = ""
for b in vtext:
    if b in cc:
        neu = cc[b]
    else:
        neu = b
    geheimtext = geheimtext + neu


print geheimtext

raw_input()
ich bedank mich schon mal für hilfe, aber die verschlüsselung sollte bitte so bleiben das aus ein buchstaben 16zeichen werden <- danke

Edit (Leonidas): Code in Python-Tags gesetzt.
BlackJack

Lass Dir beim Entschlüsseln doch einfach mal ausgeben an was `b` in der Schleife gebunden wird. Dann sollte klar werden, warum das so nicht funktionieren kann.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Warum benutzt du eigentlich zwei unverbundene Tupel und nicht einfach ein Dictionary?
SebbyStankie
User
Beiträge: 8
Registriert: Dienstag 22. Juli 2008, 15:20

danke erstmal für die schnellen antworten.

zu BlackJack, aber wie lass ich mir das ausgeben an was 'b' gebunden ist?


zu cofi, ich glaub du meinst das ich zwei "tabellen" habe oder?
ich weiß aber nicht wie ich das anders machen kann das es 16 zeichen werden.

wie gesagt bin noch nicht lange mit python
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

SebbyStankie hat geschrieben:zu BlackJack, aber wie lass ich mir das ausgeben an was 'b' gebunden ist?

Code: Alles auswählen

print b
:roll:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
SebbyStankie
User
Beiträge: 8
Registriert: Dienstag 22. Juli 2008, 15:20

:? danke !!!
SebbyStankie
User
Beiträge: 8
Registriert: Dienstag 22. Juli 2008, 15:20

also
'print b' hat bei mit 'b' angezeigt. und wie kann ich das beheben?

weil es geht doch auch bei der verschlüsselung. wieso nicht beim entschlüsseln? :oops: ist mir schon bisschen peinlich :oops:
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

SebbyStankie hat geschrieben:zu cofi, ich glaub du meinst das ich zwei "tabellen" habe oder?
ich weiß aber nicht wie ich das anders machen kann das es 16 zeichen werden.
Was in ein Paar von `()' eingebunden ist, ist ein Tupel. Da es dir um eine Übersetzung von einem Wert in einen anderen geht, solltest du ein Dictonary (Hashmap)benutzen.

Also sowas:

Code: Alles auswählen

translation_dict = {'a' : 'XIIOXOXXIOXIXIOO'}
Und so weiter ...
Dann kannst du eben per

Code: Alles auswählen

translation_dict['buchstabe']
übersetzen.
SebbyStankie
User
Beiträge: 8
Registriert: Dienstag 22. Juli 2008, 15:20

ok, DANKE werd ich gleich mal ändern. :D
BlackJack

@SebbyStankie: ``print b`` hat bei Dir wahrscheinlich nicht 'b' angezeigt. Beim Entschlüssseln hätte dazu die Eingabe falsch sein müssen. Ausserdem würde ja nicht nur ein Zeichen ausgegeben sondern die gesamte Eingabe.
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

hallo!

ich weiss nicht, ob du das einfach nur schreibst, um dich mit python vertraut zu machen, oder ob du damit ernsthaft sachen verschluesseln willst.

falls letzteres zutrifft, kann ich dir empfehlen, dir mal ein programm von mir anzuschauen:
http://home.arcor.de/roschi94/simplecrypt_source.zip

ich moechte nicht behaupten, dass das wirklich sicher ist, aber es ist auf jeden fall platzsparender und doch ein bissl sicherer als deins. :)

mfg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
SebbyStankie
User
Beiträge: 8
Registriert: Dienstag 22. Juli 2008, 15:20

:cry: das programm von dir schließt sich immer wieder.
hängt wohl damit zusammen, dass ich windows benutze :oops:
und ja ich möchte mich noch mit python vertraut machen. ich bin ja auch erst seit ca. 3 wochen damit beschäftigt.

aber nochmal zu meinem code. ich verstehe es nicht das die verschlüsselung klappt aber das entschlüsseln nicht. liegt es daran das ich beim entschlüsseln aus 16zeichen ein buchstaben machen will. :?:

hier nochmal der neu code zum entschlüsseln:

d={'XIIOXOXXIOXIXIOO' : 'a', 'IXIIXIOXIOOIXXOO' : 'b',
'OOOXOIXIXXXOOIOO' : 'c', 'OOIIOXXOOIOIIIXX' : 'd',
'IXXXXXXXIIOIOIXI' : 'e', 'IIIIIXOOIIIIXXXX' : 'f',
'OOXOOIOIOIIXIIOX' : 'g', 'OIIXOIXIIOOXOOIX' : 'h',
'XXIOXIXIOXXIXXOO' : 'i', 'IXOXXOXIOOOXIOOI' : 'j',
'XIOIXIOOOXIIOIIO' : 'k', 'OXOIIXIOXIXOIXXI' : 'l',
'OIXXOOXIOXIXOOOX' : 'm', 'OXOXXOOIOOXXXIXI' : 'n',
'IIXIXIIOXXOIXIOI' : 'o', 'OIIXIXXIOOIOXIXX' : 'p',
'IOOOOXXIOXXXOOII' : 'q', 'IOXXOIOIXXIIIOOO' : 'r',
'OIXOOOOIOXOIOIXO' : 's', 'IIXIIIIXXXXXIOOO' : 't',
'OIIOIXXOOOOOXIXX' : 'u', 'OIIXOIIXIOXOIXXO' : 'v',
'XIXIOOOXIOXOXIXI' : 'w', 'IOOXOOOOOIIOOOXO' : 'x',
'OIIXIXIXIIOIIOXI' : 'y', 'OOOIOIOXXIXIXOXO' : 'z',
'XXIIXXIXOOOXXIIO' : 'ß',}

text = raw_input('zu entcodierender text:')

geheimtext=""
for buchstabe in text:
if buchstabe in d:
neu=d[buchstabe]
else:
neu=buchstabe
geheimtext=geheimtext+neu

print geheimtext
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

SebbyStankie hat geschrieben::cry: das programm von dir schließt sich immer wieder.
hängt wohl damit zusammen, dass ich windows benutze :oops:
Nein, das liegt daran dass du die FAQ nicht gelesen hast, Punkt "Wie starte ich Programme".
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

hallo!

also:
mein programm schliesst sich, weil du es wahrscheinlich einfach nur immer doppelt angeklickt hast im explorer wie jedes andere grafische programm auch. du musst deine shell oeffnen (Start -> Ausfuehren -> cmd -> OK), und dann in den ordner wechseln wo du mein programm hingepackt hast. (cd pfad\zum\programm). dann sagst du dem python-interpreter, dass er das programm aufrufen soll (c:\python25\python simplecrypt.py) dann hast du es geschafft, und musst nurnoch lesen und ein bissl nachdenken.

hier dein code (ungetestet):

Code: Alles auswählen

# das beispiel geht davon aus,
# dass du beim eintippen des
# verschluesselten textes keine
# fehler machst!

d={'XIIOXOXXIOXIXIOO' : 'a', 'IXIIXIOXIOOIXXOO' : 'b',
'OOOXOIXIXXXOOIOO' : 'c', 'OOIIOXXOOIOIIIXX' : 'd',
'IXXXXXXXIIOIOIXI' : 'e', 'IIIIIXOOIIIIXXXX' : 'f',
'OOXOOIOIOIIXIIOX' : 'g', 'OIIXOIXIIOOXOOIX' : 'h',
'XXIOXIXIOXXIXXOO' : 'i', 'IXOXXOXIOOOXIOOI' : 'j',
'XIOIXIOOOXIIOIIO' : 'k', 'OXOIIXIOXIXOIXXI' : 'l',
'OIXXOOXIOXIXOOOX' : 'm', 'OXOXXOOIOOXXXIXI' : 'n',
'IIXIXIIOXXOIXIOI' : 'o', 'OIIXIXXIOOIOXIXX' : 'p',
'IOOOOXXIOXXXOOII' : 'q', 'IOXXOIOIXXIIIOOO' : 'r',
'OIXOOOOIOXOIOIXO' : 's', 'IIXIIIIXXXXXIOOO' : 't',
'OIIOIXXOOOOOXIXX' : 'u', 'OIIXOIIXIOXOIXXO' : 'v',
'XIXIOOOXIOXOXIXI' : 'w', 'IOOXOOOOOIIOOOXO' : 'x',
'OIIXIXIXIIOIIOXI' : 'y', 'OOOIOIOXXIXIXOXO' : 'z',
'XXIIXXIXOOOXXIIO' : 'ß',}

text = raw_input('zu entcodierender text:')

geheimtext=""

# eine schleife, die solange weitermacht, bis nix mehr in der variable 'text' steht
while text:
  # die ersten 16 zeichen von 'text' in 'x' abspeichern
  x = text[:16]
  # jetzt die ersten 16 zeichen aus der variable 'text' entfernen
  text = text[16:]
  # den richtigen buchstaben zu den 16 zeichen raussuchen
  geheimtext += d[text]

print geheimtext
mfg
roschi

PS: setz deinen code bitte naechstes mal in tags
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
SebbyStankie
User
Beiträge: 8
Registriert: Dienstag 22. Juli 2008, 15:20

vielen dank !!! für deine variante meines codes :D
musste nur noch

Code: Alles auswählen

geheimtext += d[text]
in

Code: Alles auswählen

geheimtext += d[x]
ändern und es ging.

nochmals vielen dank an alle für die schnelle hilfe :D :D :D
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Der Grund, warum dein Code nicht hingehaun hat ist, dass du mit einer for-schleife, die über einen String iteriert an die einzelnen Zeichen kommst. Was du allerdings zum entschlüsseln brauchst ist eine Sequenz von 16 Zeichen ;) Darum brauchst du slicing, wies bei roschis Code auch zu sehen ist.

Aber was ich grad sehe:

Code: Alles auswählen

if buchstabe in d:
    neu = d[buchstabe]
else:
    neu = buchstabe
geheimtext=geheimtext+neu
Das kann doch nicht so beabsichtigt sein?! Wenn ein Buchstabe kein gültiger Code ist, dann ist es doch eine falsche Eingabe und damit eine Ausnahme, die du raisen solltest.

Noch ein Tipp wegen der Lesbarkeit: Quetsch doch nich zwei Dictionary-Einträge in dieselbe Zeile, ein Eintrag pro Zeile ist besser lesbar.
SebbyStankie
User
Beiträge: 8
Registriert: Dienstag 22. Juli 2008, 15:20

alles klar mach ich dann mal so: eine zeile -> ein Dictionary-Eintrag

zu oben den code, den benutz ich jetzt ja nicht mehr.
Antworten