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

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

Beitragvon SebbyStankie » Dienstag 22. Juli 2008, 15:47

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

Beitragvon BlackJack » Dienstag 22. Juli 2008, 15:57

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
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Dienstag 22. Juli 2008, 16:17

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

Beitragvon SebbyStankie » Donnerstag 24. Juli 2008, 11:22

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 24. Juli 2008, 11:27

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

Beitragvon SebbyStankie » Donnerstag 24. Juli 2008, 11:35

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

Beitragvon SebbyStankie » Donnerstag 24. Juli 2008, 11:39

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
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Donnerstag 24. Juli 2008, 12:00

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

Beitragvon SebbyStankie » Donnerstag 24. Juli 2008, 12:07

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

Beitragvon BlackJack » Donnerstag 24. Juli 2008, 12:21

@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:

Beitragvon roschi » Donnerstag 24. Juli 2008, 19:39

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
Fuer Alle, die in Python einsteigen wollen, kann ich das Buch A Byte of Python nur waermstens empfehlen!
SebbyStankie
User
Beiträge: 8
Registriert: Dienstag 22. Juli 2008, 15:20

Beitragvon SebbyStankie » Donnerstag 24. Juli 2008, 20:33

: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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 24. Juli 2008, 20:50

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 Modvoice
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Beitragvon roschi » Donnerstag 24. Juli 2008, 20:55

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
Fuer Alle, die in Python einsteigen wollen, kann ich das Buch A Byte of Python nur waermstens empfehlen!
SebbyStankie
User
Beiträge: 8
Registriert: Dienstag 22. Juli 2008, 15:20

Beitragvon SebbyStankie » Freitag 25. Juli 2008, 12:37

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]